當前位置:成語大全網 - 新華字典 - Redis字典的漸進式rehash

Redis字典的漸進式rehash

擴展或收縮哈希表需要將ht[0]中的所有鍵值對rehash到ht[1]中。不過,這個rehash的動作不壹定是壹次性、集中式完成的,而是分多次、漸進式完成的。

這樣做的原因在於,避免當ht[0]中保存了太多的鍵值對時,壹次性集中式rehash讓服務器在較長的時間內停止服務。rehash動作的過程中肯定是不能對外提供增刪改查的操作的,如果ht[0]中只有四個鍵值對的話,那麽壹次性完成rehash也不會對服務器的運行造成太多延遲,但如果是四百萬、四千萬的話壹次性完成rehash將會嚴重阻塞服務器運行。

以下是哈希表漸進式rehash的詳細步驟:

漸進式 rehash 采用了 分治 的思想,將 rehash 鍵值對所需的工作分攤到了每次對字典的增刪改查操作上,雖然降低了 redis 服務器的整體吞吐量,但提升了響應速度,不會出現在某次操作時特別慢的情況。

因為在漸進式 rehash 的過程中,字典會同時使用 ht[0] 和 ht[1] 兩個哈希表,所以在這個過程中對字典的增刪改查操作會在兩個哈希表上進行。例如在字典上查找壹個鍵時,程序會先查詢ht[0],如果沒有查到就再查 ht[1]。

新添加到字典上的鍵值對只會保存在ht[1]上,而ht[0]上不再進行任何添加操作,這樣就保證了ht[0]中包含的鍵值對的數量只減不增,並隨著rehash的進行而逐漸變成空表。