答疑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
《Redis 源码剖析与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 曾轼麟感谢老师的答疑,针对这些经典的问题,相信我还会重新回来复阅的2021-11-022
收起评论