redis 持久性
最编程
2024-07-16 07:20:12
...
1
)执⾏
AOF
重写请求,如果当前进程正在执⾏
AOF
重写,请求不执⾏
并返回如下响应:
ERR Background append only file rewriting already in progress
如果当前进程正在执⾏
bgsave
操作,重写命令延迟到
bgsave
完成之后
再执⾏,返回如下响应:
Background append only file rewriting scheduled
2
)⽗进程执⾏
fork
创建⼦进程,开销等同于
bgsave
过程
3
)主进程
fork
操作完成后,继续响应其他命令。所有修改命令依然写
⼊
AOF
缓冲区并根据
appendfsync
策略同步到硬盘,保证原有
AOF
机制
正确性
由于
fork
操作运⽤写时复制技术,⼦进程只能共享
fork
操作时的内
存数据。由于⽗进程依然响应命令,
Redis
使⽤
“AOF
重写缓冲区
”
保存
这部
分新数据,防⽌新
AOF
⽂件⽣成期间丢失这部分数据
4
)⼦进程根据内存快照,按照命令合并规则写⼊到新的
AOF
⽂件。每
次批量写⼊硬盘数据量由配置
aof-rewrite-incremental-fsync
控制,默
认为
32MB
,防⽌单次刷盘数据过多造成硬盘阻塞
5
)新的
AOF
⽂件写⼊完成后,⼦进程发送信号给⽗进程,⽗进程更新
统计信息,具体⻅
info persistence
下的
aof_*
相关统计
⽗进程把
AOF
重写缓冲区的数据写⼊到新的
AOF
⽂件
使⽤新
AOF
⽂件替换⽼⽂件,完成
AOF
重写
AOF的优缺点分析
AOF 的优点
数据保证:我们可以设置
fsync
策略,⼀般默认是
Everysec
,也可以设置每次写⼊追加,所以即使服务死掉了,也最多丢失⼀秒数据
⾃动缩⼩:当
AOF
⽂件⼤⼩到达⼀定程度的时候,后台会⾃动的去执⾏
AOF
重写,此过程不会影响主进程,重写完成后,新的写⼊将会写到新的
AOF
中,
旧的就会被删除掉。但是此条如果拿出来对⽐
RDB
的话还是没有必要算成优点,只是官⽹显示成优点⽽已。
AOF 的缺点
性能相对较差:它的操作模式决定了它会对
Redis
的性能有所损耗。(主线程写⽂档)
体积相对更⼤:尽管是将
AOF
⽂件重写了,但是毕竟是操作过程和操作结果仍然有很⼤的差别,体积也毋庸置疑的更⼤。
恢复速度更慢:因为要重新加载每条命令的执⾏,恢复速度⽐较慢
推荐阅读