bgrewriteaof 的过程是这样吗?

来源:5-7 AOF(2)

qq_四道风_14222281

2020-10-27

aof_bgrewrite_buff 是把内存的数据像以 save rdb文件的方式一样吗(相当于一个快照写入到新创建的一个aof文件中)+在aof重写过程中redis客户端发送的新命令写到aof_buff中 = 新的aof文件(最后替换旧的aof文件)

写回答

1回答

梦飞_0002

2021-04-20

1)主进程fork出一个子进程生成新的AOF日志,fork时运用写时复制

  技术,将主进程的内存页表copy给子进程,子进程通过内存页表读

  取内存数据,并解析为一条条写命令追加到新生成的AOF日志中,

  如此就完成了AOF日志重写的第一步;

(2)主进程执行完fork后会继续执行后面来的命令(读和写都有),并将

  其中的写操作记录到aof_buf中,同时也写入aof_rewrite_buf中;

(3)aof_buf会由另一个后台线程fsync线程,按照指定的同步策略(no、

  always、everysec中的一种)将buf数据写回磁盘;

(4)而aof_rewrite_buf是在子进程完成新的AOF写入后发送信号通知主

  进程,再由主进程将这个buf中的所有写操作追加到新的AOF文件

  中,这个新的AOF日志文件就是AOF重写日志;

(5)最后主进程会用新AOF替换旧的AOF,至此整个AOF重写圆满结束


1
0

一站式学习Redis 从入门到高可用分布式实践

Redis课程升级!系统梳理Redis知识体系,掌握redis必备!

2277 学习 · 261 问题

查看课程