問題:
配置了多個客戶端,那麼呼叫setex()方法的時候,那麼資料快取到哪個伺服器呢?
實際上redis集群中內建了16384個雜湊槽,搭建集群時,每台伺服器都分配了固定數量的雜湊槽。當需要存資料時,redis對key進行出crc16演算法運算,然後對運算結果取餘,把資料對映到不同的redis伺服器。
一、redis cluster架構
redis3.0以後就支援了redis-cluster,採用無中心結構,每個節點儲存資料和整個集群的狀態,每個節點都和其他節點連線。
架構圖:
結構特點:
a、所有redis節點彼此互聯(ping-pong機制),內部使用二進位制協議優化傳輸速度和寬頻;
b、節點的fail是通過集群中超過半數的節點檢測失效時才生效;
c、客戶端和redis節點直連,不需要中間proxy層,客戶端不需要連線集群所有節點,連線集群中任何乙個可用節點即可;
d、redis-cluster把所有物理節點對映到0-16383個slot上(不一定平均),cluster負責維護node-slot-value;
e、redis將16384個slot分配好後,當需要儲存資料時,使用crc16(key) mod 16384的值,然後決定放到slot中。
d、取資料時,也是通過crc16(key) mod 16384來確定去哪台伺服器取資料。
二、節點分配
三個主節點,可以在一台伺服器,也可以多台,使用雜湊槽(hash slot)來分配16384個slot,得到如下結果:
a節點:0-5460
b節點:5461-10922
c節點:10923-16383
新增乙個節點,取各個節點前一部分的slot分配到新的節點上:
a節點:1365-5460
b節點:6827-10922
c節點:12288-16383
d節點:0-1364,5461-6826,10923-12287
三、主從模式
redis-cluster為了保證資料的高可用性,加入了主從模式,乙個主節點對應乙個或多個從節點,主節點提供資料訪問,從節點備份主節點資料,當主節點掛掉後,從從節點中選取乙個當做主節點,從而保證集群不會掛掉;
小知識積累一
最近在研究一些反映時間,突然感覺自己對時間單位了解很少,因此簡單總結下 大部分人日常用到的最小時間單位應該是秒了。那麼,比秒更小的單位還有很多。首先介紹的是釐秒 centisecond 是一秒的百分之一 0.01秒 簡稱cs。毫秒 millisecond 是一秒的千分之一 0.001秒 簡稱ms。微...
filecoin知識積累(一)
filecoin知識點積累 檢索礦工 像cdn一樣,它們獲取資料並將其提供給客戶端 儲存客戶端 想要儲存資料的使用者 檢索客戶端 想要獲取資料的使用者 2.解壓並進入目錄 3.建立工作量證明目錄 mkdir p var tmp filecoin proof parameters paramcache...
知識的積累
最初認識darwin 的時候,我還是個沒畢業的新手。那時,我在公司做畢業設計,題目就是用c 對部門內已有的一套c的庫進行封裝。那套庫就是darwin開發的,這次封裝工作也是在他的領導之下進行的。當時,我對c 有著說不清的好感,心裡認定那是成為高手的必經之路,因此很樂於參加到這個工作之中。darwin...