Redis 的哈希表實現(xiàn)采用了開放尋址法中的線性探測(linear probing)來解決哈希沖突。當插入一個新元素時,如果計算出的哈希值對應的槽位已經(jīng)被其他元素占用,Redis 會按照一定的規(guī)則尋找下一個可用的槽位。這個過程就稱為 rehash。
以下是 Redis rehash 機制的詳細工作原理:
初始化階段:
rehash 觸發(fā):
hash_max_ziplist_entries
和 hash_max_ziplist_value
來調(diào)整。HSET
、HGET
、HDEL
等)導致哈希表中的元素數(shù)量發(fā)生變化時,也可能觸發(fā) rehash 操作。執(zhí)行 rehash:
hash_table_max_size
來調(diào)整)。完成 rehash:
需要注意的是,Redis 的 rehash 機制是自動進行的,用戶無需手動觸發(fā)。此外,Redis 還支持在運行時動態(tài)地調(diào)整哈希表的大小,以適應不斷變化的數(shù)據(jù)量和負載。