一、关于 BGREWRITEAOF
在前面的一篇文章中,分享了关于 redis 的持久化,Redis 之 RDB 与 AOF,本文简单介绍下 AOF 的一个很重要的命令 - BGREWRITEAOF,1.0.0 开始可以使用,指定 Redis 启动 AOF 重写进程。重写将创建当前AOF 文件的一个小型优化版本。
1、如果 BGREWRITEAOF 失败,服务野不会丢失任何数据,因为旧的 AOF 保持不变。
2、只有当没有任何后台进程在执行持久性操作时,才会由 Redis 触发重写。具体地说:
(1)如果一个 Redis 子进程正在磁盘上创建快照,就会设置一个任务执行 AOF 重写,但直到生成RDB文件的保存子文件终止时才开始执行。在这种情况下,BGREWRITEAOF 返回OK代码,但是带有适当的消息。从 Redis 2.6 开始,可以使用 INFO 命令查看是否计划执行 AOF重写任务
(2)如果 AOF 重写已经在进行中,命令将返回一个错误,并且不会在稍后的时间安排 AOF 重写进入
3、自 Redis 2.4 以后 AOF 重写由 Redis 自动触发的,但是 BGREWRITEAOF 命令可以在任何时候触发重写
二、重写的原理
重写的原理其实很简单,例如:
EX1(A1<A2<A3):
A1 时刻,set a b c d 四个元素
A2 时刻, set e f 两个元素
A3 时刻,进行重写,那么最后的命令就是 set a b c d e f,一条命令达到之前两条命令的效果
EX2(B1<B2<B3):
B1 时刻,set a b c d e f
B2 时刻,delete c e
B3 时刻重写,最后记录的命令就是 set a b d ff