一、事务及锁应用
a) 事务开启:multi
b) 事务回滚:discard
c) 事务成功:exec
d) 事务前上乐观锁,检测key是否改动:watch key
e) 取消所有锁:unwatch
注:multi后面的语句中出错可能有两种情况:
1、语法有问题,exec时报错,所有语句取消执行。
2、语法本身没错,但适用对象出错,比如 sadd 操作 string对象,exec之后,会执 行正确的语句,并跳过不适当的语句。
二、频道发布和消息订阅
a) 订阅消息:subscribe test
b) 发布消息:publish test message
c) 通配订阅:psubscribe test*
三、rdb快照持久化
修改redis.config:
a) save 900 1:刷新快照到硬盘中,必须满足两者要求才触发--每隔900秒之后至少1个关键字发生变化。
b) save 300 10:每隔300秒之后至少10个关键字发生变化。
c) stop-writes-on-bgsave-error yes:后台存储错误停止写操作
d) rdbcompression yes:使用LZF压缩rdb文件。
e) rdbchecksum yes:存储和加载rdb文件时校验。
f) dbfilename dump.rdb:设置rdb文件名。
g) dir ./ :设置工作目录,rdb文件会写入该目录
rdb工作原理:每隔n分钟或n次写操作后,从内存dump数据形成rdb文件压缩放在备份目录.
rdb的缺陷: 两个保存点之间断电或出故障将会丢失1-N分钟的数据,出于对持久化的更精细要求,redis增添了aof方式 append only file.
四、aof日志持久化
a) 开启aof日志功能:appendonly no => appendonly yes
b) appendfsync always:每1命令都立即同步到aof,安全但速度慢
c) appendfsync everysec:折中方案,每秒写一次
d) appendfsync no:写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof。同步频率低,速度快。
e) no-appendfsync-on-rewrite yes;正在导出rdb快照的过程中,是否停止同步aof
f) auto-aof-rewrite-percentage 100:aof文件大小比起上次重写时的大小,增长率100%时重写
g) auto-aof-rewrite-min-size 64mb:aof文件至少超过64M时重写。
注: aof重写:是指把内存中的数据,简化成命令写入到aof日志中,解决aof 日志过大的问题。如果rdb文件和aof文件都存在,优先使用aof来恢复数据。在dump.rdb过程中,所有的操作缓存在内存队列里,dump执行完成后统一操作,不会导致aof数据丢失。
五、redis主从复制(集群)
a) Master配置:
1.关闭rdb快照(备份工作交给slave)
2.可以开启aof
b) Slave 配置:
i. 声明slave-of:slaveof 127.0.0.1 6379
ii. 配置密码masterauth(如果master requirepass有密码)
iii. Slave打开rdb快照功能
iv. 配置是否只读(slave-read-only)
c) 复制redis.conf:cp redis.conf redis6380.conf cp redis.conf redis6381.conf
d) 开启守护进程(主从):daemonize yes
e) 端口号(主从): port 端口号
f) 启动pid(主从):pidfile /var/run/redis_端口号.pid
g) 配置日志文件(主从):logfile "./logdata/端口号.log"
六、redis运维常用命令
a) time:服务器时间,时间戳(秒),微妙数
b) dbsize:当前数据库key数量
c) bgrewriteaof:后台进程重写aof
d) bgsave:后台进程保存rdb快照
e) save:保存rdb快照
f) lastsave:上次保存时间
g) slaveof:设为slave服务器
h) flushdb:清空当前数据库所有键
i) flushall:清空所有数据库所有键
j) info:查看redis详情
k) config get/set xx:获取或设置 redis.conf文件的配置信息
l) shutdown:关机
七、aof恢复
a) 如果flushall:立即 shutdown nosave关机,然后到aof日志把flushall命令删除。
八、sentinel监控
a) sentinel monitor def_master 217.0.0.1 6379 2:连续两次连接不上为master失效
b) sentinel auth-pass def_master xxx:设置master密码
c) sentinel down-after-milliseconds def_master 30000:默认30秒为通讯失效间隔时间
d) sentinel can-failover def_master yes:如果master失效,实施其中一slave为master
e) redis-server ./sentinel --sentinel:执行sentinel redis服务
九、PHPredis扩展
a) 到pecl.php.net复制 stable 版本下载链接
b) wget 下载解压
c) 执行