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

期中测试题答案 | 这些问题你都答对了吗?

你好,我是蒋德钧。这节课,我来给你公布一下期中考试中问答题的答案。

第一题

Redis 源码中实现的哈希表在 rehash 时,会调用 dictRehash 函数。dictRehash 函数的原型如下,它的参数 n 表示本次 rehash 要搬移 n 个哈希桶(bucket)中的数据。假设 dictRehash 被调用,并且 n 的传入值为 10。但是,在 dictRehash 查找的 10 个 bucket 中,前 5 个 bucket 有数据,而后 5 个 bucket 没有数据,那么,本次调用 dictRehash 是否就只搬移了前 5 个 bucket 中的数据?
int dictRehash(dict *d, int n)

答案分析

当 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
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 飞龙
    源码学习果然头疼,40分
    2022-09-29归属地:广东
  • Milittle
    和老师学到很多关于redis的知识,其实我最近学完最大的感觉就是可能不用就忘记了,要是能有一个学习check list供大家学习,我感觉这个应该会成为一个好的后续继续学习的方法
    2021-09-16
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部