第一節:redis 集群概述
redis cluster是去中心化,去中介軟體的,也就是說,集群中的每個節點都是平等的關係,都是對等的,每個節點都儲存各自的資料和整個集群的狀態。每個節點都和其他所有節點連線,而且這些連線保持活躍,這樣就保證了我們只需要連線集群中的任意乙個節點,就可以獲取到其他節點的資料。
那麼redis 是如何合理分配這些節點和資料的呢?
redis 集群並沒有使用傳統的一致性雜湊來分配資料,而是採用另外一種叫做雜湊槽 (hash slot)的方式來分配的。redis cluster 預設分配了 16384 個slot,當我們set乙個key 時,會用crc16演算法來取模得到所屬的slot,然後將這個key 分到雜湊槽區間的節點上,具體演算法就是:crc16(key) % 16384。
注意的是:必須要3個以後的主節點,否則在建立集群時會失敗,我們在後續會實踐到。
所以,我們假設現在有3個節點已經組成了集群,分別是:a, b, c 三個節點,它們可以是一台機器上的三個埠,也可以是三颱不同的伺服器。那麼,採用雜湊槽 (hash slot)的方式來分配16384個slot 的話,它們三個節點分別承擔的slot 區間是:
節點a覆蓋0-5460;
節點b覆蓋5461-10922;
節點c覆蓋10923-16383.
那麼,現在我想設定乙個key ,比如叫my_name:
set my_name wind
按照redis cluster的雜湊槽演算法:crc16(『my_name』)%16384 = 2412。 那麼就會把這個key 的儲存分配到 a 上了。
同樣,當我連線(a,b,c)任何乙個節點想獲取my_name這個key時,也會這樣的演算法,然後內部跳轉到b節點上獲取資料。
這種雜湊槽的分配方式有好也有壞,好處就是很清晰,比如我想新增乙個節點d,redis cluster的這種做法是從各個節點的前面各拿取一部分slot到d上,我會在接下來的實踐中實驗。大致就會變成這樣:
節點a覆蓋1365-5460
節點b覆蓋6827-10922
節點c覆蓋12288-16383
節點d覆蓋0-1364,5461-6826,10923-12287
同樣刪除乙個節點也是類似,移動完成後就可以刪除這個節點了。
redis cluster主從模式
redis cluster 為了保證資料的高可用性,加入了主從模式,乙個主節點對應乙個或多個從節點,主節點提供資料訪問,從節點則是從主節點拉取資料備份,當這個主節點掛掉後,就會有這個從節點擊取乙個來充當主節點,從而保證集群不會掛掉。
上面那個例子裡, 集群有abc三個主節點, 如果這3個節點都沒有加入從節點,如果b掛掉了,我們就無法訪問整個集群了。a和c的slot也無法訪問。
所以我們在集群建立的時候,一定要為每個主節點都新增了從節點, 比如像這樣, 集群包含主節點a、b、c, 以及從節點a1、b1、c1, 那麼即使b掛掉系統也可以繼續正確工作。
b1節點替代了b節點,所以redis集群將會選擇b1節點作為新的主節點,集群將會繼續正確地提供服務。 當b重新開啟後,它就會變成b1的從節點。
不過需要注意,如果節點b和b1同時掛了,redis集群就無法繼續正確地提供服務了。
集群的時候,我們可以單機集群也可以多機集群,後面我們分別實驗;
Redis學習9 鍵過期
鍵過期 redis提供兩個命令來設定鍵的生存時間 ttl,time to live 包含以下 expire key seconds 將鍵key的生存時間設定為秒數 pexpire milliseconds 將鍵key的生存時間設定為毫秒數 如果過鍵不存在返回0,返回1表示設定成功 設定完成即開始,當...
redis續期 Redis學習
過期刪除策略 redis 過期策略及實現原理 mp.weixin.qq.com redis分布式鎖 聊聊redisson的分布式鎖 www.jianshu.com 聊聊分布式鎖 mp.weixin.qq.com redis distlock redis中國使用者組 crug www.redis.cn...
JedisCluster 鏈結redis集群
先貼 redis.clients jedis 2.8.2 jedispoolconfig config new jedispoolconfig config new jedispoolconfig config.setmaxtotal 60000 設定最大連線數 config.setmaxidle ...