Redis-数据结构与对象-字典
字典
字典是数据库和哈希键的底层实现。

拉链的链表头部插入,以解决冲突。

rehash流程:
- 为字典的
ht[1]哈希表分配空间, 这个哈希表的空间大小取决于要执行的操作, 以及ht[0]当前包含的键值对数量 (也即是ht[0].used属性的值):- 如果执行的是扩展操作, 那么
ht[1]的大小为第一个大于等于ht[0].used * 2的
(2的n次方幂); - 如果执行的是收缩操作, 那么
ht[1]的大小为第一个大于等于ht[0].used的
。
- 如果执行的是扩展操作, 那么
- 将保存在
ht[0]中的所有键值对 rehash 到ht[1]上面: rehash 指的是重新计算键的哈希值和索引值, 然后将键值对放置到ht[1]哈希表的指定位置上。 - 当
ht[0]包含的所有键值对都迁移到了ht[1]之后 (ht[0]变为空表), 释放ht[0], 将ht[1]设置为ht[0], 并在ht[1]新创建一个空白哈希表, 为下一次 rehash 做准备。
实际上,为了防止服务中断时间过长,rehash动作是分多次逐步完成的,被称为渐进式rehash。
rehash期间会先查找ht[0],再查找ht[1]。

(
浙公网安备 33010602011771号