dict是redis一个非常重要的基础数据结构,dict用来维护key和value映射关系的数据结构,与很多语言中的Map或者dictionary类似。
redis的一个database中所有key到value的映射,就是一个dict来维护的。
另外,当redis中的hash结构数据较多时,hash的底层会从ziplist转为dict。
当redis中的sorted set 数据较多时,sorted set的底层从ziplist转为dict+ skiplist。
基于哈希表的查找性能非常高效,redis中,dict采用哈希算法从key计算得到在哈希表中的位置,采用拉链法解决冲突,并在装载因子到达阈值时自动扩展内存,引发重哈希。
reids的dict的非常重要的一个特点是它的重哈希,dict的重哈希是一种增量式重哈希,在需要扩展内存的时候避免一次性对所有key进行重哈希,而是将重哈希操作分散到对于dict的各个增删改查操作中去。这种方法能做到每次只对一小部分key进行重哈希,而每次重哈希之间不影响dict的操作。这种设计避免了重哈希期间单个请求的响应时间剧烈增加。
为了增量重哈希,dict的数据结构里包含两个哈希表。在重哈希期间,数据从第一个哈希表向第二个哈希表迁移。