作者回复: 太赞了! 感谢分享这么详细的代码查找过程。其实,查找某个函数是我们在阅读源码过程中最常遇到的问题。你分享的过程给了一个非常棒的示范!尤其是第5,6、7步在线索断了后,如何再进行查找。 其实,我在想,你在第7步,找到49个相关调用,有没有想过直接看server.c文件 :)
作者回复: dictRehash迁移的桶个数n,是dictRehash函数的参数,所以不是固定的。 以Redis 5.0.8代码为例,有两处调用了dictRehash,一个是_dictRehashStep函数(dict.c),这个函数传入的n是1;另一个是dictRehashMilliseconds函数(dict.c), 这个函数传入的n是100。
作者回复: 是的。这个时候Redis的设计考虑是,hash表的负载已经很重了,bucket的链表可能比较长了,对Redis性能影响比较大了。此时,就需要做rehash扩容,以便减少bucket链表长度。