溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis集群是16384個槽的原因

發(fā)布時間:2020-10-29 14:57:36 來源:億速云 閱讀:287 作者:小新 欄目:關系型數據庫

Redis集群是16384個槽的原因?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純热荩屛覀円黄饋砜纯窗桑?/p>

Redis 集群并沒有使用一致性hash,而是引入了哈希槽的概念。Redis 集群有16384個哈希槽,每個key通過CRC16校驗后對16384取模來決定放置哪個槽,集群的每個節(jié)點負責一部分hash槽。但為什么哈希槽的數量是16384(2^14)個呢,這個問題在github上有人提過,作者也給出了解答,下面我們來簡單分析一下。

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

在redis節(jié)點發(fā)送心跳包時需要把所有的槽放到這個心跳包里,以便讓節(jié)點知道當前集群信息,16384=16k,在發(fā)送心跳包時使用bitmap壓縮后是2k(2 * 8 (8 bit) * 1024(1k) = 2K),也就是說使用2k的空間創(chuàng)建了16k的槽數。

雖然使用CRC16算法最多可以分配65535(2^16-1)個槽位,65535=65k,壓縮后就是8k(8 * 8 (8 bit) * 1024(1k) = 8K),也就是說需要需要8k的心跳包,作者認為這樣做不太值得;并且一般情況下一個redis集群不會有超過1000個master節(jié)點,所以16k的槽位是個比較合適的選擇。

作者原話:

1、普通心跳數據包攜帶節(jié)點的完整配置,該配置可以用舊配置以冪等方式替換,以便更新舊配置。這意味著它們包含原始形式的節(jié)點的槽配置,16k的槽配置需要使用2k內存空間,但是使用65k槽將使用8k的內存空間。

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

因此,16k是比較合適的,可以確保每個主設備有足夠的槽,最大為1000個。redis的node配置信息通過位圖存儲傳輸的,傳輸前有一個壓縮過程,壓縮比跟槽個數和節(jié)點數有很大關系(because when N is small the bitmap would have slots/N bits set that is a large percentage of bits set.)【槽數量/節(jié)點數】當這個N越大,壓縮比就越小。

感謝各位的閱讀!看完上述內容,你們對Redis集群是16384個槽的原因大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI