為什麼RedisCluster會設計成16384個槽呢?
Redis Cluster 是Redis的叢集實現,內建資料自動分片機制,叢集內部將所有的key對映到16384個Slot中,叢集中的每個Redis Instance負責其中的一部分的Slot的讀寫。叢集客戶端連線叢集中任一Redis Instance即可傳送命令,當Redis Instance收到自己不負責的Slot的請求時,會將負責請求Key所在Slot的Redis Instance地址返回給客戶端,客戶端收到後自動將原請求重新發往這個地址,對外部透明。一個Key到底屬於哪個Slot由crc16(key) % 16384 決定。
為什麼RedisCluster會設計成16384個槽呢?這個問題有點類似於ThreadLocal中的0x61c88647。
對於這個問題,作者給出瞭解答。原版回答如下圖所示,對應的連結地址為:
1.如果槽位為65536,傳送心跳資訊的訊息頭達8k,傳送的心跳包過於龐大。
在訊息頭中,最佔空間的是 myslots[CLUSTER_SLOTS/8]。當槽位為65536時,這塊的大小是: 65536÷8=8kb因為每秒鐘,redis節點需要傳送一定數量的ping訊息作為心跳包,如果槽位為65536,這個ping訊息的訊息頭太大了,浪費頻寬。
2.redis的叢集主節點數量基本不可能超過1000個。
如上所述,叢集節點越多,心跳包的訊息體內攜帶的資料越多。如果節點過1000個,也會導致網路擁堵。因此redis作者,不建議redis cluster節點數量超過1000個。那麼,對於節點數在1000以內的redis cluster叢集,16384個槽位夠用了。沒有必要擴充到65536個。
3.槽位越小,節點少的情況下,壓縮率高。
Redis主節點的配置資訊中,它所負責的雜湊槽是透過一張bitmap的形式來儲存的,在傳輸過程中,會對bitmap進行壓縮,但是如果bitmap的填充率slots / N很高的話(N表示節點數),bitmap的壓縮率就很低。如果節點數很少,而雜湊槽數量很多的話,bitmap的壓縮率就很低。而16384÷8=2kb,怎麼樣,神奇不!
綜上所述,作者決定取16384個槽,不多不少,剛剛好!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940568/viewspace-2670581/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 為什麼Web 設計會“死”?Web
- 兩個程式設計師談戀愛,究竟會是什麼樣的呢?程式設計師
- 為什麼要成為「無敵」程式設計師?程式設計師
- 為什麼成為一名程式設計師?程式設計師
- Python為什麼會這麼火呢?原因是什麼?Python
- 你為什麼成為一名程式設計師?程式設計師
- 程式設計沒點為什麼,生活就是十萬個為什麼程式設計
- 成為ui設計師要培訓哪些技能呢?UI
- 下一個成為IE會不會是Chrome,看看是什麼情況。Chrome
- UI設計師需要學習什麼呢?UI
- ui設計是什麼工資待遇呢?UI
- Julia會成為下一個程式設計大語言嗎?程式設計
- 為什麼你還是學不會程式設計程式設計
- 為什麼程式設計師做外包會被瞧不起?程式設計師
- 為什麼要這麼設計呢 但其實它只有一把鎖
- 為什麼Laravel會成為最成功的PHP框架LaravelPHP框架
- 把html、css、js這三個分別做個比喻,你會把它們比喻成什麼呢?HTMLCSSJS
- 為什麼要做Redis分割槽?Redis
- 【vue】為什麼v-for中需要一個key呢?Vue
- 你為什麼離職呢?
- 為什麼轉行都會選擇Python呢?學習python有什麼好處?Python
- 為什麼 qt 成為 c++ 介面程式設計的第一選擇?QTC++程式設計
- Python 為什麼如此設計?Python
- 鎖賦值給其他變數為什麼會死鎖呢?賦值變數
- 什麼是設計模式?為什麼要使用設計模式?有什麼好處?設計模式
- [水文] 什麼原因讓我成為一名程式設計師程式設計師
- JVM(六)為什麼新生代有兩個Survivor分割槽?JVM
- 什麼是垃圾蒐集(GC)?為什麼要有GC呢?GC
- 4個月內成為UI設計師!UI
- 為什麼遊戲會是DDoS攻擊的重災區呢?遊戲
- gin 自定義驗證器 為什麼會註冊失敗呢
- 架構設計要按照什麼原則進行呢?架構
- 為什麼ABAP整型的1轉成string之後,後面會多個空格
- 你為什麼選擇程式設計師這個職業?程式設計師
- 雲端計算為什麼會不被信任
- 程式設計師工資高,但為什麼越來越多的人都不再願意做程式設計師呢?程式設計師
- 相對論為什麼不正確呢?
- 為什麼影片APP要接入CDN呢APP