Redis学习笔记

一、简介

redis是由意大利人antirez开发的一款内存高速缓存数据库,数据模型为key-value

两大缓存:页面缓存 (smarty缓存)和数据缓存(redis)(把数据放到一个读取速度更快的介质上(内存、文件、数据库))

redis和memocached的比较:
①redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储
②redis支持master-slave(主-从)模式应用
③redis支持数据的持久化,可以将内存中的数据保存到磁盘中,重启时可以再次加载进行使用
④redis单个value的最大限制是1GB,memocached只能保存1MB的数据

二、安装并启动redis
 
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar xzf redis-4.0.1.tar.gz -C /usr/local
cd /usr/local/redis-4.0.1
make & make test
yum install -y tcl(报错则输入此行代码)
vi redis.conf
set nu(显示行数)
修改为守护进程的方式运行(第136行)daemonize yes
绑定主机地址(第69行)bind 127.0.0.1 主机ip地址
设置redis密码(第500行)requirepass frankie
测试redis:
  启动src/redis-server redis.conf
  客户端连接src/redis-cli(有密码则src/redis-cli -a frankie)
主从复制配置(第281行)slaveof 主服务器ip 主服务器端口
 
三、操作与使用

./redis-cli(当前目录下进入redis操作终端)

①keys 操作(redis里,除了"\n"和空格不能作为key的组成内容,其它字符都能作为key的组成内容。)
exists key(检测key是否存在)
del key1 key2 ... keyn(删除)
type key(返回指定key的类型)
key pattern(返回匹配指定模式的所有key)
rename oldkey newkey(改名字)
dbsize(返回当前数据库key的数量)
expire key seconds(为key指定过期时间) 
ttl key(返回key的剩余过期秒数)
select db-index(选择数据库)
move key db-index(将key从当前数据库移动到指定数据库) 
flushdb(删除当前数据库中所有key)
flushall(删除所有数据库中所有key) 

②string 操作
set key value(设置key对应的值为string类型的value) 
mset key1 value1 key2 value2 ... keyn valuen
mget key1 key2 ... keyn
incr key(对key的值进行加加操作,并返回新的值) 
decr key(同上,减减操作)
incrby key integer(加指定值) 
decrby key integer(减指定值)
append key value(给指定key的字符串值追加value)
substr key start end(返回截取过的key的字符串值)(包括开始位置和结束位置,下标从0开始)

③list链表 操作
lpush key string(在key对应list的头部添加字符串元素)
rpush key string
rpop key(从list的尾部删除元素,并返回删除元素)
lpop key
llen key(返回key对应list的长度,key不存在则返回0,如果key对应类型不是list则返回错误)
lrange key start end(返回指定区间内的元素)
ltrim key start end(截取)

④set集合(string类型的无序集合,最大可包含2的32次方-1个元素) 操作
sadd key member(添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在则返回错误)
srem key member1 member2 ... membern(给key对应的set中移除元素)
smove p1 p2 member(从p1对应set中移除给定元素到p2对应的set中,成功返回1)
sinter key1 key2 ... keyn(取交集)
sunion key1 key2 ... keyn(取并集)
sdiff key1 key2 ... keyn(取差集)

smembers key(返回key对应set的所有元素,结果是无序的)
sismember key member(判断member是否在key对应的set中)
scard key(返回key对应的set中元素个数)

⑤sorted set排序集合 操作(权&数据)
zadd key score member(添加元素到集合,元素在集合中存在则更新对应score)
zrem key member(删除指定元素)
zincrby key incr member(按照incr幅度增加对应member的score值,返回score值)
zrank key member(返回指定元素在集合中的排名(下标),集合中元素是按score从小到大排序的)
zrevrank key member(同上,但是是按score从大到小排序的)
zrange key start end(类似lrange操作从集合中取指定区间的元素,返回的是有序结果(从小到大))
zrevrange key start end(同上,但是是按score从大到小排序)
zcard key(返回集合中元素个数)
zscore key element(返回给定元素对应的score)
zremrangebyrank key min max(删除集合中排名在给定区间的元素) 

⑥hash 操作(类似于mysql的记录)
hset key field value(为hash field指定值,如果key不存在,则先创建)
get key field(获取指定的hash field值)
hmset key field1 value1 field2 value2 ... fieldn valuen(为全部的hash field指定值)
hgset key field1 field2 ... fieldn(获取全部的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

save 900 1(900秒内如果超过1个key被修改,则发起快照保存)
save 300 10
save 60 10000

bgsave(异步保存数据到磁盘(快照保存))
lastsave(返回上次成功保存到磁盘的unix时间戳)
shutdown(同步保存到服务器并关闭redis服务器)
bgrewriteaof(当日志文件过长时优化AOF日志文件存储)
./redis-cli -h 127.0.0.1 -p 6379 bgsave(手动发起快照持久化)
②append only file(AOF持久化)
本质:把用户执行的每个“写”命令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体“写”指令而已。
开启AOF持久化(会清空redis内部数据)
redis.conf文件修改appendonly yes
kill -9 7287(端口号)(强制杀死进程)
appendfsync always(每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用)
appendfsync everysec(每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐)
appendfsync no(完全依靠操作系统,性能最好,持久化没保证)
./redis-cli bgrewriteaof(对aof备份文件内容进行压缩优化处理)

五、主从模式(master&slave)
为了降低每个redis服务器的负载,可以设置多个,并做主从模式
一个服务器负载“写”数据,其他服务器负载“读”数据
主服务器数据会“自动”同步给从服务器
redis.conf文件修改slaveof 主服务器ip地址 主服务器端口号
slave-read-only yes(默认,不建议修改)

六、PHP与redis结合
①安装PHP的redis扩展
把phpredis扩展软件和其他依赖软件上传到linux系统里边(phpredis和autoconf)
在redis扩展解压软件目录执行指令/usr/local/php/bin/phpize(可以把redis扩展反过来装进php里边)
提示没安装autoconf,安装autoconf
./configure && make && make install
执行指令/usr/local/php/bin/phpize(此时安装成功)
./configure --with-php-config=usr/local/php/bin/php-config(为redis扩展软件做configure配置)
make && make install(redis相对php的扩展文件生成成功)
修改php.ini文件(/usr/local/php/lib/php.ini),搜索extension,在最后添加extension=redis.so
usr/local/http2/bin/apachectl restart(重启appache)

七、通过php操作redis
在php里边,redis就是一个功能类Redis,Redis类里边有许多成员方法(名字基本与redis指令的名字一致,参数也一致)
通过反射感知Redis类里边全部的操作方法:
$me=new ReflectionClass('Redis') ;
var_dump($me->getMethods());

posted @ 2017-08-28 15:01  冉青枫  阅读(163)  评论(0)    收藏  举报