基础数据结构:

redis4. dict字典

 

 

 (注意dict是字典,dict->type是相关函数指针, dict->type->keyDup是执行该方法)

具体调用链路:

redis4. dict字典

 

 

 

 

渐进式rehash:

redis4. dict字典

 

 新增/删除时:

 redis4. dict字典

 

 查询时:

redis4. dict字典 

都会进行rehash

所以当dict数据量大的时候,在扩容时,可能会影响set/get的rt

 

 

 

GOOD:https://blog.csdn.net/belalds/article/details/93713491

size 空间大小,used 已使用

redis4. dict字典

 

 

 

 总体过程:

步骤1:判断是否要扩容:

redis4. dict字典

 

 

 步骤2:渐进式扩容前准备:

redis4. dict字典

 

 

 准备方法:

 redis4. dict字典

步骤3:在增删改查时进行部分rehash工作:

redis4. dict字典

 

每次增量式的数量:

redis4. dict字典

 

 

数量为 1* 10:

redis4. dict字典

 

 这里指的数量(或者说bucket),是指数组元素的个数,每个元素即为一个链表。

可见,当字典数据量大时,假设1000万数据,1:1的情况,那么需要100万次操作才能rehash万。

 

 redis4. dict字典

 

 系统帮助是每次 100 * 10 = 100个数组元素:

 redis4. dict字典

 

 

问题:

redis4. dict字典

 

 

 

相关文章: