redis的rehash過程


在擴容和收縮的時候,如果哈希字典中有很多元素,一次性將這些鍵全部rehash到ht[1]的話,可能會導致服務器在一段時間內停止服務。所以,采用漸進式rehash的方式,詳細步驟如下:

  1. ht[1]分配空間,讓字典同時持有ht[0]ht[1]兩個哈希表
  2. rehashindex的值設置為0,表示rehash工作正式開始
  3. 在rehash期間,每次對字典執行增刪改查操作是,程序除了執行指定的操作以外,還會順帶將ht[0]哈希表在rehashindex索引上的所有鍵值對rehash到ht[1],當rehash工作完成以后,rehashindex的值+1
  4. 隨着字典操作的不斷執行,最終會在某一時間段上ht[0]的所有鍵值對都會被rehash到ht[1],這時將rehashindex的值設置為-1,表示rehash操作結束

漸進式rehash采用的是一種分而治之的方式,將rehash的操作分攤在每一個的訪問中,避免集中式rehash而帶來的龐大計算量。

需要注意的是在漸進式rehash的過程,如果有增刪改查操作時,如果index大於rehashindex,訪問ht[0],否則訪問ht[1]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM