字典又称为哈希,由一个k-v键值对组成。
set msg "hello world"
4.1 字典实现
Redis的字典使用哈希表作为底层实现,一个哈希表里面有多个哈希表及诶单,每个哈希表节点就保存了字典中的一个键值对。
4.1.1 哈希表
4.1.2 哈希表节点
利用链哈希解决哈希冲突问题
4.1.3 字典
4.2 哈希算法
使用的是MurmurHash2算法来计算键的哈希值
4.3 哈希冲突
链地址法来解决哈希冲突。
4.4 reHash
为了让哈希表的负载因子维持在一个合理的范围之内,当哈希表保存的键值对数量太多或者太少时,需要对哈希表的大小进行收缩扩折狂战。
扩展的就是2的n次方幂
那就是 有一个h[1]
的哈希索引来构造。
哈希表的扩展与收缩
当一下条件中的任意条件被满足时,程序将自动对哈希表执行扩展操作。
4.5 渐进式rehash
渐进式rehash执行期间的哈希表操作,查找会现在h[0]再到h[1]添加就一律添加到h[1]中了。
4.6 字典API
4.7 重点回顾
- 字典被广泛应用于实现Redis的各种功能其中包括数据库和哈希键
- redis的字典用哈希表作为底层实现,每个字典带有两个哈希表,一个平时使用,一个在进行rehash时使用
- 当字典被用作数据库的底层实现,或者哈希键底层是现实,使用
murmurhash2
算法计算哈希值 - 利用链哈希的方法来处理哈希冲突
- 在rehash时,是渐进式操作,而不是一次性操作的。