共計 1005 個字符,預計需要花費 3 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
Redis 集群是 16384 個槽的原因?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是丸趣 TV 小編給大家帶來的參考內容,讓我們一起來看看吧!
Redis 集群并沒有使用一致性 hash,而是引入了哈希槽的概念。Redis 集群有 16384 個哈希槽,每個 key 通過 CRC16 校驗后對 16384 取模來決定放置哪個槽,集群的每個節點負責一部分 hash 槽。但為什么哈希槽的數量是 16384(2^14)個呢,這個問題在 github 上有人提過,作者也給出了解答,下面我們來簡單分析一下。
為什么是 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 配置信息通過位圖存儲傳輸的,傳輸前有一個壓縮過程,壓縮比跟槽個數和節點數有很大關系(because when N is small the bitmap would have slots/N bits set that is a large percentage of bits set.)【槽數量/節點數】當這個 N 越大,壓縮比就越小。
感謝各位的閱讀!看完上述內容,你們對 Redis 集群是 16384 個槽的原因大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注丸趣 TV 行業資訊頻道。
向 AI 問一下細節
丸趣 TV 網 – 提供最優質的資源集合!