字典是 Redis 服务器中出现最为频繁的复合型数据结构。除了 hash 结构的数据会用到字典外,整个 Redis 数据库的所有 key 和 value 也组成了一个 全局字典,还有带过期时间的 key 也是一个字典。(存储在 RedisDb 数据结构中)
字典结构是什么样的呢?
Redis 中的字典相当于 HashMap,内部实现也差不多类似,采用哈希与运算计算下标位置;通过 “数组 + 链表” 的链地址法 来解决哈希冲突,同时这样的结构也吸收了两种不同数据结构的优点。
字典是怎么扩容的?
字典结构内部包含 两个 hashtable,通常情况下只有一个哈希表 ht[0] 有值,在扩容的时候,把ht[0]里的值rehash到ht[1],然后进行 渐进式rehash ——所谓渐进式rehash,指的是这个rehash的动作并不是一次性、集中式地完成的,而是分多次、渐进式地完成的。
待搬迁结束后,h[1]就取代h[0]存储字典的元素。