redis的哈希槽為什么是16384個


為什么是16384(2^14)個?

在redis節點發送心跳包時需要把所有的槽放到這個心跳包里,以便讓節點知道當前集群信息,16384=16k,在發送心跳包時使用bitmap壓縮后是2k(2 * 8 (8 bit) * 1024(1k) = 2K),

也就是說使用2k的空間創建了16k的槽數。

雖然使用CRC16算法最多可以分配65535(2^16-1)個槽位,65535=65k,壓縮后就是8k(8 * 8 (8 bit) * 1024(1k) = 8K),

也就是說需要需要8k的心跳包,作者認為這樣做不太值得;並且一般情況下一個redis集群不會有超過1000個master節點,所以16k的槽位是個比較合適的選擇

作者原話:

1、普通心跳數據包攜帶節點的完整配置,該配置可以用舊配置以冪等方式替換,以便更新舊配置。

這意味着它們包含原始形式的節點的槽配置,16k的槽配置需要使用2k內存空間,但是使用65k槽將使用8k的內存空間。

2、同時,由於其他設計折衷,Redis集群不可能擴展到超過1000個節點。

因此,16k是比較合適的,可以確保每個主設備有足夠的槽,最大為1000個。

redis的node配置信息通過位圖存儲傳輸的,傳輸前有一個壓縮過程,壓縮比跟槽個數和節點數有很大關系【槽數量/節點數】當這個N越大,壓縮比就越小。

 


免責聲明!

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



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