期中测试题答案 | 这些问题你都答对了吗?
蒋德钧
你好,我是蒋德钧。这节课,我来给你公布一下期中考试中问答题的答案。
第一题
Redis 源码中实现的哈希表在 rehash 时,会调用 dictRehash 函数。dictRehash 函数的原型如下,它的参数 n 表示本次 rehash 要搬移 n 个哈希桶(bucket)中的数据。假设 dictRehash 被调用,并且 n 的传入值为 10。但是,在 dictRehash 查找的 10 个 bucket 中,前 5 个 bucket 有数据,而后 5 个 bucket 没有数据,那么,本次调用 dictRehash 是否就只搬移了前 5 个 bucket 中的数据?
答案分析
当 Redis 哈希表在做 rehash 搬移数据时,如果遇到空的 bucket,那么 Redis 会跳过空的 bucket,再查找下一个 bucket。但是,在 dictRehash 函数中,是使用了 empty_visits 变量,来记录跳过的空 bucket 数量,而 empty_visits 的值是被初始化成 n*10,也就是要搬移的 bucket 数量的 10 倍。
因此,如果 rehash 过程中已经跳过了 empty_visits 数量的空 bucket,那么本次 dictRehash 的执行就会直接返回了,而不会再查找 bucket。这样设计的目的,也是为了避免本次 rehash 的执行一直无法结束,影响正常的请求处理。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Redis期中测试题答案解析 本文总结了Redis期中测试题的答案解析,涉及了Redis源码中哈希表的rehash过程和事件驱动框架的相关函数调用关系。在第一题中,解析了dictRehash函数在rehash搬移数据时的处理逻辑,以及empty_visits变量的作用,阐明了dictRehash函数在处理空bucket时的执行流程。在第二题中,详细解释了Redis事件驱动框架中各函数与epoll机制主要函数的对应调用关系,包括了aeCreateEventLoop、aeCreateFileEvent和aeProcessEvents等函数与epoll_create、epoll_ctl和epoll_wait等主要函数之间的关联。通过本文的解析,读者可以快速了解Redis期中测试题的答案及相关技术特点,对Redis的源码实现和事件驱动框架有更深入的理解。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Redis 源码剖析与实战》,新⼈⾸单¥59
《Redis 源码剖析与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 飞龙源码学习果然头疼,40分2022-09-29归属地:广东
- Milittle和老师学到很多关于redis的知识,其实我最近学完最大的感觉就是可能不用就忘记了,要是能有一个学习check list供大家学习,我感觉这个应该会成为一个好的后续继续学习的方法2021-09-16
收起评论