RDB:通过生成某一个时间段的快照,对Redis的数据做周期性的持久化。
AOF:周期性记录操作日志,对redis的操作周期性的做持久化操作。
RDB
优点:
1、恢复数据RDB更快,因为存储的数据,直接将数据载入内存即可。
2、对Redis影响小,Redis是Fork一个子进程去执行持久化操作。
3、适合做冷备,存储样式为多个文件,每个文件代表一个时间点的数据,而AOF只有一个文件,想要做冷备需要定时存储某个时间点的快照。
缺点:
1、数据存储粒度比较大,会丢失部分数据。
设置RDB刷新间隔:
300秒内至少有10个变更操作才进行持久化
save 300 10
2、RDB在生成很大的数据快照时,可能会对客户端服务造成短暂的暂停。
AOF 默认关闭
优点:
1、数据更新粒度小,保留的数据最完整
有三个选项可设置:
(1)、每次更新操作都写入磁盘 (2)、每秒将缓冲区的操作写入磁盘一次 (3)、30s一次将缓冲区写入磁盘一次
2、使用append-only模式,写入性能高。
缺点:
1、文件较大,更占用资源
2、恢复速度没有RDB快,因为RDB直接写入数据,而AOF是执行所有记录的命令
TIPS
1、AOF更适合做热备,RDB更适合做冷备
2、两者都启动时,Redis默认使用AOF做恢复策略。因为这样数据更完整。
3、当AOF的文件过大怎么办?
AOF重写: 当AOF文件过大时,会生成新的AOF文件,新的AOF文件会对老AOF文件压缩。
如:
set name a
set name b
变为
set name b
操作顺序是:
1、创建一个子进程,将旧的文件写入新的AOF文件。
2、此期间将指令进行缓存并写入旧的AOF文件。
3、当新文件被写完时,向主进程发送信号。
4、主进程将缓冲区的指令写入新的AOF文件。
5、之后所有的命令将被写入新的AOF文件。