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是漸進式的,分屢次完成