Redis的字典使用哈希表做为底层实现,一个哈希表里面有n个哈希节点,每一个节点里面存储着key-value键值对
数据结构
一、哈希表
spa
哈希表数据结构,下图:
指针
一个空的哈希表,以下图:
hash
二、哈希表节点
扩展
数据结构,以下:
sed
三、哈希表总结构im
当多个key的hash值相同的时候,哈希表采用链式方式来解决冲突,每一个哈希表节点都有一个next指针,指向下一个key的hash值相同的节点,这样,hask值相同的哈希表节点就构成了一个单向链表链表
四、字典总结
4.一、数据结构
next
字典中包含2个哈希表,通常状况下只使用ht[0]哈希表,ht[1]只会在对ht[0]作rehash的时候使用
4.二、字典的结构
五、rehash
当ht[0]随着操做的不断进行,为了让哈希表维持在一个合理的范围,会对哈希表作相应的扩展或收缩操做
5.一、扩展
ht[1].size = ht[0].used*2的n次方
5.二、收缩
ht[1].size = 第一个大于等于ht[0].used的2的n次方
将保存在htp[0]的键值对所有rehash到ht[1],而后清空ht[0],将ht[1]设置成ht[0],在新的ht[1]上建立一个新的哈希表,待下一次rehash使用
固然rehash是渐进式的,分屡次完成