答疑5 | 第25~32讲课后思考题答案及常见问题答疑
蒋德钧
你好,我是蒋德钧。今天这节课,我们来继续解答第 25 讲到 32 讲的课后思考题。
今天讲解的这些思考题,主要是围绕哨兵命令实现、Redis Cluster 实现,以及常用开发技巧提出来的。你可以根据这些思考题的解答思路,进一步了解下哨兵实例命令和普通实例命令的区别、Redis Cluster 对事务执行的支持情况,以及函数式编程方法在 Redis 测试中的应用等内容。
第 25 讲
问题:如果我们在哨兵实例上执行 publish 命令,那么,这条命令是不是就是由 pubsub.c 文件中的 publishCommand 函数来处理的呢?
这道题目主要是希望你能了解,哨兵实例会使用到哨兵自身实现的命令,而不是普通 Redis 实例使用的命令。这一点我们从哨兵初始化的过程中就可以看到。
哨兵初始化时,会调用 initSentinel 函数。而 initSentinel 函数会先把 server.commands 对应的命令表清空,然后执行一个循环,把哨兵自身的命令添加到命令表中。哨兵自身的命令是使用 sentinelcmds 数组保存的。
那么从 sentinelcmds 数组中,我们可以看到 publish 命令对应的实现函数,其实是 sentinelPublishCommand。所以,我们在哨兵实例上执行 publish 命令,执行的并不是 pubsub.c 文件中的 publishCommand 函数。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了Redis技术中的命令处理、集群状态维护和数据同步等方面的知识点。首先介绍了哨兵实例和普通Redis实例的命令处理差异,以及Redis Cluster中clusterSendPing函数计算wanted值的原因。接着详细解释了processCommand函数中discardTransaction和flagTransaction的调用目的,以及维护Redis Cluster集群状态的数据结构clusterState中slots_to_keys字典树的更新函数调用。此外,还讨论了addReplyReplicationBacklog函数中的skip计算,以及在masterTryPartialResynchronization函数中对全量复制和增量复制的处理。文章还涉及了Redis的扩展模块使用经验和对SDS的小型测试框架的介绍。通过这些内容,读者能够快速了解Redis技术的核心特点和实际应用场景,并且有助于扩展对Redis源码的理解和掌握Redis实现中的设计思想。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Redis 源码剖析与实战》,新⼈⾸单¥59
《Redis 源码剖析与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论