Redis 源码剖析与实战
蒋德钧
中科院计算所副研究员
17747 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
Redis 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

答疑4 | 第19~24讲课后思考题答案及常见问题答疑

你好,我是蒋德钧。这节课,我们继续来解答第 19 到 24 讲的课后思考题。
注意,今天讲解的这些思考题,一方面会涉及 Redis 哨兵实例的代码细节,以及管道机制在 Redis 中的应用;另一方面,这些思考题也是考查常用的开发知识,比如状态机、子进程使用等进程考查。希望你通过这节课的内容,可以再回顾下 Redis 哨兵实例的代码,并进一步了解题目解答中涉及的开发知识和技术。

第 19 讲

问题:RDB 文件的创建是由一个子进程来完成的,而 AOF 重写也是由一个子进程完成的,这两个子进程可以各自单独运行。那么请你思考一下,为什么 Redis 源码中在有 RDB 子进程运行时,不会启动 AOF 重写子进程呢?
我设计这道题的目的,是希望你能了解和掌握 RDB 文件创建和 AOF 重写这两个操作本身,涉及到的资源消耗。我们在开发系统软件时,对于使用子进程或是线程来进行并发处理,有时会存在一个误区:只要使用了多子进程或是多线程就可以加速并行执行的任务。
但是,执行多子进程能够获得的收益还是要看这些子进程,对资源竞争的情况。就像这道题目提出的,虽然 RDB 创建和 AOF 重写可以会用两个子进程单独运行,但是从它们使用的资源角度来看,它们之间会存在竞争。
那么,一个最明显的资源竞争就是对磁盘的写竞争。创建 RDB 文件和重写 AOF,都需要把数据写入磁盘,如果同时让这两个子进程写盘,就会给磁盘带来较大的压力。而除了磁盘资源竞争以外,RDB 文件创建和 AOF 重写还需要读取 Redis 数据库中的所有键值对,如果这两个子进程同时执行,也会消耗 CPU 资源。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Redis课程中第19到24讲的课后思考题答案及常见问题解答。首先,文章介绍了为什么在Redis源码中,在有RDB子进程运行时,不会启动AOF重写子进程。其次,讨论了Redis源码中使用管道的多个场景,包括RDB、AOF重写、主从复制和Redis module运行时。文章还解释了主库在主从复制时不需要使用状态机,而从库需要使用状态机。最后,指出了哨兵实例初始化过程中解析配置文件的函数调用关系。通过本文,读者可以了解Redis源码中的技术细节,包括子进程资源竞争、管道的应用、状态机的使用以及配置文件解析过程。此外,还介绍了哨兵实例执行周期性函数sentinelTimer时对server.hz的调整目的,以及哨兵在sentinelTimer函数中对主节点和从节点的处理流程。这些内容涵盖了Redis源码细节和通用的开发知识和技巧,对读者进行了全面的技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Redis 源码剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 曾轼麟
    感谢老师的答疑,针对这些经典的问题,相信我还会重新回来复阅的
    2021-11-02
    2
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部