前提
RDB
路径 dir 默认 ./
文件名 Dbfilename The filename where to dump the DB
保存策略
After 3600 seconds (an hour) if at least 1 change was performed
After 300 seconds (5 minutes) if at least 100 changes were performed
After 60 seconds if at least 10000 changes were performed
save 3600 1 300 100 60 10000
stop-writes-on-bgsave-error yes当Redis无法写入磁盘的话,直接关掉Redis的写操作
rdbcompression yes 进行rdb保存时,将文件压缩
rdbchecksum yes
在存储快照后,还可以让Redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功
手动保存快照
save只管保存,其它不管,全部阻塞
bgsave 后台不会阻塞
AOF
开启 appendonly no AOF默认不开启
路径 dir AOF文件的保存位置和RDB文件的位置相同
文件名 appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
AOF重写期间是否禁止fsync:如果开启该选项,可以减轻文件重写时CPU和硬盘的负载(尤其是硬盘),但是可能会丢失AOF重写其间的数据:需要在负载和安全性之间进行平衡
- aof-load-truncated yes 如果AOF文件结尾损坏,Redis启动时是否仍载入AOF文
同步策略
每秒钟同步一次 appendfsync everysec 缺省策略 性能并不是很槽糕
有数据修改发生时 appendfsync always 每次有数据修改发生时都会写入AOF文件
会极大消弱Redis的性能,因为这种模式下每次write后都会调用fsync
从不同步 appendfsync no 高效但是数据不会主动被持久化
重写
默认关闭
触发条件
客户端执行bgrewriteaof命令
auto-aof-rewrite-min-size 64mb
auto-aof-rewrite-percentage 100
只有当AOF文件的增量大于起始siz的100%时(就是文件大小翻了一倍),启动重写
如果误操作了(FLUSHALL等),只要AOF未被重写,停止服务移除AOF文件尾部FLUSHALL命令,重启Redis,可以将数据集恢复到FLUSHALL执行之前的状态
文件损坏
redis-check-aof --fix appendonly.aof 进行恢复
混合模式
aof-use-rdb-preamble true
二者动态切换
在Reds2.2或以上版本,可以在不重启的情况下,从RDB切换到AOF
为最新的dump.rdb业文件创建一个备份
cp dump.rdb dump.rdb.bak
config set appendonly yes 开启aof
config set save "" 关闭rd
容灾备份
开启RDB持久化
- save 900 1
- save 300 10
- save 60 10000
开启AOF配置
- appendonly yes
- appendfilename "appendony.aof"
- auto-aof-rewrite-percentage 100
- auto-aof-rewrite-min-size 64mb
- appendfsync everysec