為什麼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
- 為什麼成為一名程式設計師?程式設計師
- 為什麼有的程式設計師不會程式設計?程式設計師
- 我們為什麼需要原型設計,該如何進行原型設計呢?原型
- 為什麼這麼多人學不會C語言呢?C語言
- 你為什麼成為一名程式設計師?程式設計師
- 為什麼女程式設計師會這麼少?程式設計師
- 程式設計沒點為什麼,生活就是十萬個為什麼程式設計
- 作為一個Java 程式設計師 你應該會什麼Java程式設計師
- Frank Gillett:為什麼平板電腦會成為主流計算裝置
- 下一個成為IE會不會是Chrome,看看是什麼情況。Chrome
- 為什麼該和程式設計師約會?我有 20 個理由程式設計師
- 為什麼Laravel會成為最成功的PHP框架LaravelPHP框架
- 為什麼 Laravel 會成為最成功的 PHP 框架?LaravelPHP框架
- 成為ui設計師要培訓哪些技能呢?UI
- ui設計是什麼工資待遇呢?UI
- UI設計師需要學習什麼呢?UI
- 為什麼美國可以成為科技之都 程式設計從娃娃抓起程式設計
- 為什麼程式設計師做外包會被瞧不起?程式設計師
- 為什麼你還是學不會程式設計程式設計
- 你為什麼總是學不會設計模式?設計模式
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- 為什麼為什麼為什麼為什麼為什麼你要做一名程式設計師?程式設計師
- 【vue】為什麼v-for中需要一個key呢?Vue
- Julia會成為下一個程式設計大語言嗎?程式設計
- 為什麼遊戲會是DDoS攻擊的重災區呢?遊戲
- 鎖賦值給其他變數為什麼會死鎖呢?賦值變數
- 漫畫:為什麼程式設計師會死不瞑目程式設計師
- 為什麼要做Redis分割槽?Redis
- AngularJS 為什麼如此火呢?AngularJS
- 什麼是垃圾蒐集(GC)?為什麼要有GC呢?GC
- 為什麼windows更換一個硬體就這麼難呢?Windows
- 為什麼 qt 成為 c++ 介面程式設計的第一選擇?QTC++程式設計