AOFRW的结果对Redis可见,HISTORY AOF会被Redis异步清理,backgroundRewriteDoneHandler函数通过哪些步骤实现了上述逻辑?
a)在修改内存中的server.aof_manifest前,先dup一份临时的manifest结构,接下来的修改都将针对这个临时的manifest进行。这样做的好处是,一旦后面的步骤出现失败,我们可以简单的销毁临时manifest从而回滚整个操作,避免污染server.aof_manifest全局数据结构;
b)从临时manifest中获取新的BASE AOF文件名(记为new_base_filename),并将之前(如果有)的BASE AOF标记为HISTORY;
c)将子进程产生的temp-rewriteaof-bg-pid.aof临时文件重命名为new_base_filename;
d)将临时manifest结构中上一次的INCR AOF全部标记为HISTORY类型;
e)将临时manifest对应的信息持久化到磁盘(persistAofManifest内部会保证manifest本身修改的原子性);
f)如果上述步骤都成功了,我们可以放心的将内存中的server.aof_manifest指针指向临时的manifest结构(并释放之前的manifest结构),至此整个修改对Redis可见;
g)清理HISTORY类型的AOF,该步骤允许失败,因为它不会导致数据一致性问题。以上内容摘自《阿里开发者手册-Redis专题》电子书,点击https://developer.aliyun.com/ebook/download/7770可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。