redis支持两种持久化方式RDB(Redis Database)和AOF(Append only file)。
1. RDB
a. 在指定的时间将内存中的数据集快照写入磁盘,默认存储文件的名称为dump.rdb
b. RDB文件是一个紧凑压缩的二进制文件
c. 恢复大数据集的时候速度比AOF要快,适合数据备份和灾难恢复
d. 何时产生快照
i. 手工:
• save命令:会阻塞Redis服务器直至RDB过程完成为止
• bgsave命令:fork创建子进程,在后台异步执行快照操作,同时还可以响应其他请求,但可能丢失数据
ii. 自动
• 通过在配置文件中配置save m n, 数据集在m秒更改n次时触发bgsave操作,可以同时配置多个策略
• 主从架构时,当从节点发送sync给主节点时,主节点触发bgsave操作
e. 相关配置
i. dir:rdb文件存放的目录
ii. dbfilename:rdb文件的名称
iii. rdbcompression:yes 是否压缩数据
iv. rdbchecksum:yes 导入时是否检查
2. AOF
a. 采用追加文件的方式,把每次的写命令记录到日志,重启时重新执行AOF文件中的命令来恢复数据
b. 可以通过redis-check-aof来解决写入时宕机的问题
c. rewrite重写:AOF文件越来越大,包含很多的无效命令,通过定期重写来压缩AOF文件
i. 手动触发:调用bgrewriteaof命令
ii. 通过配置触发;
• auto-aof-rewrite-min-size: AOF重写时文件的最小体积,默认为64M
• auto-aof-rewrite-percentage: 当前AOF文件空间和上一次AOF文件空间的比值
d. 基本原理:
i. redis每次写入时,都是把命令追加到aof_buf缓冲区
ii. AOF根据策略向硬盘做同步操作,高频的AOF会带来影响
e. 基本配置:
i. appendonly:是否开启AOF,默认为no
ii. appendfilename:AOF文件名称
iii. dir:AOF文件存储路径
iv. appendfsync:同步方式(always | everysec | no)
• always: 每次修改都会写入AOF,性能较差
• everysec:每秒同步一次(默认)
• no:由操作系统控制,性能最佳但最不安全
v. no-appendfsync-on-rewrite: aof重写期间是否同步
vi. aof-load-truncated: aof尾部文件出现问题时如何处理,yes表示写日志继续,no表示等待修复后写入
3. rewrite的混合模式
a. 结合rdb和aof
b. 在aof重写的时候,以rdb形式进行重写(即二进制形式),这样aof的文件更小
c. 恢复数据时,先按照aof恢复,如不存在,则查找rdb是否存在
d. 4.0版本之后已经开始支持混合模式