https://www.cnblogs.com/sfzlstudy/p/16248726.html

why:

Redis的字典使用哈希表作为底层实现。

在字典容量不足,或者使用率非常低的时候,需要做对应的扩容,或者缩容操作。

what:

字典结构如下:

https://img2022.cnblogs.com/blog/2489423/202205/2489423-20220509115613022-837903453.png

具体代码:

https://img2022.cnblogs.com/blog/2489423/202205/2489423-20220509114951485-1095598198.png

https://img2022.cnblogs.com/blog/2489423/202205/2489423-20220509115023629-1659418151.png

https://img2022.cnblogs.com/blog/2489423/202205/2489423-20220509115040485-718983907.png

字典(dict)中:type属性和privdata属性是针对不同类型的键值对,而创建多态字典而设置的。

type属性是一个指向dictType结构的指针,每个dictType结构保存了一组用于操作特定类型键值对的函数。Redis会为用途不同的字典设置不同类型的特定函数。

privadata属性则保存了需要传给那些类型特定函数的可选参数。

ht属性是一个包含了两个项的数组,数组中每个项都是一个dictht哈希表,一般情况下,字典只使用ht\[0\]哈希表,而ht\[1\]哈希表只对ht\[0\]哈希表进行rehash时使用。

how:

扩/缩容大小:

如果是扩容操作,ht\[1\]的大小为第一个大于等于ht\[0\].used\*2的2的n次方幂;

如果是收缩操作,ht\[1\]的大小为第一个大于等于ht\[0\].used的2的n次方幂;