开发者社区> 问答> 正文

AOFRW的结果对Redis可见,HISTORY AOF会被Redis异步清理,background

已解决

AOFRW的结果对Redis可见,HISTORY AOF会被Redis异步清理,backgroundRewriteDoneHandler函数通过哪些步骤实现了上述逻辑?

展开
收起
游客lmkkns5ck6auu 2022-10-11 21:02:29 401 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    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可下载完整版

    2022-10-12 23:54:35
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载