您的位置:首页 > 数据库 > Redis

Redis

2016-05-22 13:34 561 查看

remote directory server(远程数据服务)

内存高速缓存数据库,数据模型为key-value,由C语言编写,支持丰富的数据结构:string 、hash、 list、 set、 sorted set,可持久化,保证数据安全。

使用缓存可减轻数据库的负载。

在开发网站的时候如果一些数据在短时间内不会发生变化,而他们要被频繁访问,为了提高用户的请求速度和降低网站的负载,就把这些数据放到一个读取速度更快的介质上或者通过较少的计算量就可以获得该数据,该行为就称作对数据的缓存。介质可以是文件、数据库、内存,内存常用于数据缓存。

缓存的两种形式:

页面缓存常用于CMS内存管理系统里边(新闻页面);

数据缓存常用于页面的具体数据里面。

redis 与 memcached 比较

redis 不仅仅支持简单的k/v类型数据,同时还提供 list、set、zset、hash等数据结构的存储;

redis 支持master-slave(主-从)模式应用;

redis 支持数据持久化,可以将内存中的数据保持在磁盘中,重启时候可以再次加载进行使用;

redis 单个 value 的最大限制是 1GB ,memcached 只能保存1MB的数据

安装redis

由于redis是运行于linux系统上的,所以得在linux系统上安装,至于windows系统下的,microsoft也有做一些模仿,可以自行去查找,下面讲的是linux上的安装

首先是在官网上下载下来tar包,将其解压缩

redis 安装方式不同的是它 只需要在解压目录下执行 make,至于复制执行文件则由自己选择

src目录下有redis-cli(redis执行脚本)redis-serve(开启服务),将这两个文件复制到自己创建的执行目录下;将redis解压目录下的配置文件redis.conf也复制到执行目录下

启动redis服务
./redis-serve
,redis就会在前台启动;若想要redis在后台启动,需修改conf里面的
datamonize yes
保存,运行redis
./redis-serve redis.conf




查询redis是否运行,
ps -A|grep redis


启动redis程序,
./redis-cli




key操作

grammarinfo
set key value建立值
get key获得值
exists key测试指定key是否存在
del key1 key2 …删除指定key
type key返回指定key的类型
keys pattern返回匹配模式的key
rename oldkey newkey重命名key
expire key seconds为key指定过期时间
ttl key返回key剩余过期时间
select db-index(0-15)选择数据库
dbsize返回当前数据库key数量
move key db-index移动key到指定数据库
flushdb删除当前数据库中的key
flushall删除所有key

string 类型操作

grammarinfo
set key val设置key值
mset key1 val1 key2 val2…一次性设置多个值
mget key1 key2 …一次性获取多个值
incr key对key进行加1
decr key对key进行减1
incrby key integer对key进行加integer
decrby key integer对key进行减integer
append key value对key进行连接value
substr key start end返回截取的字符串

list 类型数据

list实质是一个双向链表。通过push pop 操作从链表的头部和尾部进行添加、删除的操作,使得list既可以作为栈,又可以作为队列

grammarinfo
lpush key string在key对应list头部添加字符串元素
rpush key string在尾部添加元素
rpop key在list的尾部删除元素,并返回删除元素
lpop key从list头部删除元素,并返回删除元素
llen key对应list长度,key不存在则返回0,如果key对应类型不是list,返回错误
lrange key start end返回指定区间内的元素,下标从0开始
ltrim key start end截取list,保留指定区间内的元素,删除其它元素

set 集合类型

string类型的无序集合。最大可包含2^32-1个元素,set除了基本的添加删除操作,其它有用的操作还包含集合的并集,交集,差集。集合中的元素不能重叠。

grammarinfo
sadd key member添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在则返回错误
srem key member从key对应set中移除指定元素,成功返回1
smove p1 p2 member从p1对应的集合中移除member并添加到p2对应集合中
scare key返回set元素个数
sismember key member判断member是否存在于set中
sinter key1 key2 …返回所有给定key对应集合的交集
sunion key1 key2 …返回给定的并集
sdiff key1 key2 …返回给定前者的差集
smembers key返回key对应集合的多有元素,无序的

sort set 排序集合类型

和set一样sort set也是string类型的集合,不同的是每个元素都会关联一个权,通过权可以有序地获得集合中的元素。排序集合中的每个元素都是权值结合,set只有一个值

grammarinfo
zadd key score member添加元素到集合,元素在集合中存在则更新对应score
zrem key member删除指定元素,1表示成功,如果元素不存在则返回0
zincrby key incr member按照incr幅度增加对应member的score值,返回score值
zrank key member返回指定元素在集合中的排名(下标),集合中元素按score从小到大排序
zrevrank key member同上,从大到小
zrange key start end类似lrange操作从集合中取出指定区间的元素,返回的是有序结果
zrevrange key start end同上,返回结果是按照score逆序
zcard key返回集合元素个数
zscore key element返回给定元素对应的score
zremrangebyrank key min max删除集合中排名在给定区间的元素
hash

grammarinfo
hset key field value设置hash field 为指定值,如果key不存在,则先创建
hget key field获取指定的 hash field
hmget key field1 field2 …获取全部指定的hash field
hmset key field1 value field2 value …同时设置hash的多个field
hincrby key field integer将指定的hash field 加上指定值
hexists key field测试指定field是否存在
hdel key field删除指定hash field
hlen key返回指定hash的field数量
hkeys key返回hash的所有field
hvals key返回hash所有value
hgetall key返回hash的所有 field 和 value

持久化功能

redis为了内部数据安全考虑,会把本身的数据以文件的形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到redis内存里面。数据保存到硬盘的过程就称为“持久化”效果。

snap shotting 快照持久化

该持久化默认开启,一次性把redis中的全部数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行持久化操作。

快照持久化在本地硬盘保留的数据备份文件:dump.rdb
配置文件:dbfilename dump.rdb  dir ./


快照持久化频率:save time num time秒内有numK个数据被修改则执行操作

手动持久化

./redis-cli bgsave

./redis-cli -h ip -p 3379 bgsave

append only file (AOF持久化)

把用户执行的每个写指令(添加、修改、删除)都备份到文件中,还原数据的时候就执行具体指令

开启AOF持久化(会清空redis内部数据)

appendonly yes  appendfilename appendonly.aof


关闭执行脚本
exit


杀死进程
kill -9 7287


aof 频率
appendfsync everysec


aof文件优化压缩
./redis-cli bgrewriteaof


相关指令:

./redis-cli lastsave 返回上次保存成功unix时间戳

./redis-cli shutdown 同步保存到服务器并关闭redis

主从模式

为了减低redis服务器的负载,可以设置多个redis服务器。其中一个服务器负载“写”操作(添加、修改、删除),其它负载负责“读”操作,主服务器数据会自动同步数据给从服务器。

开启作为从服务器
slaveof ip port


从服务器默认禁止写入操作
slave-read-only yes


php安装redis扩展

需要安装包 phpredis.tar.gz autoconf.tar.gz

首先安装phpredis依赖包autoconf

首先解压autoconf,不需要做配置,
./configure && make && make install
若出现下面问题:

Can't locate Data/Dumper.pm in @INC (@INC contains: ../lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ../lib/Autom4te/C4che.pm line 33.


并不是系统缺失perl,而是缺少Data/Dumper,执行下列代码

yum install perl-Data-Dumper -y


安装phpredis

在解压的phpredis目录内执行
/usr/local/php/bin/phpize
,目的是为了将redis加入php的扩展。

[root@localhost phpredis-master]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
configure.in:3: warning: prefer named diversions
configure.in:3: warning: prefer named diversions


对phpredis 进行配置

[root@localhost phpredis-master]# ./configure --with-php-config=/usr/local/php/bin/php-config


接着执行make , make install执行结果可看到生成扩展文件在哪里

[root@localhost phpredis-master]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

[root@localhost phpredis-master]# ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
总用量 784
-rwxr-xr-x. 1 root root 799928 5月  24 13:33 redis.so


在php配置文件/lib/php.ini中引用该扩展
extension=redis.so


启动apache
bin/apachectl start


使用本机访问虚拟主机,可见redis扩展安装成功。



php操作redis

在php里边,redis就是一个功能类Redis,Redis类里边有许多成员方法(名字基本与redis指令名字一致,参数也一致)

$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->select($index);
$redis->set('name','bee');
$redis->mset(array('author'=>'ligbee','db'=>'redis'));


利用反射感知redis类的全部操作方法

//实例化一个反射类对象
$redis = new ReflectionClass('Redis');
//获得类的全部操作方法
var_dump($redis->getMethods());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 数据库