當有兩個或以上數量的鍵被分配到了哈希表數組的同一個索引上面時, 我們稱這些鍵發生了沖突(collision)。
Redis 的哈希表使用鏈地址法(separate chaining)來解決鍵沖突: 每個哈希表節點都有一個 next
指針, 多個哈希表節點可以用 next
指針構成一個單向鏈表, 被分配到同一個索引上的多個節點可以用這個單向鏈表連接起來, 這就解決了鍵沖突的問題。
因為 dictEntry
節點組成的鏈表沒有指向鏈表表尾的指針, 所以為了速度考慮, 程序總是將新節點添加到鏈表的表頭位置(復雜度為 ), 排在其他已有節點的前面。