因爲redis的響應速度快,每秒支持的併發極高(號稱10萬),如今redis愈來愈流行了
redis支持的存儲有: string, hash(map),list, set, sortset 同時可使用redis的setnx 來實現分佈式鎖
首先談談redis的哨兵模式:redis
哨兵支持對主從的監控,而且當主節點掛機以後,能夠啓動從節點升級爲主節點繼續提供服務
同時哨兵也支持對客戶端提供發現服務,客戶端經過鏈接哨兵從而獲取主節點的信息,若是主節點掛機,在升級從節點爲主節點以後,客戶端經過哨兵能夠鏈接上新的主節點
主節點和從節點之間經過同步寫命令來保持數據一致(在啓動的時候會馬上先同步主節點的快照,保存主節點的信息)
判斷節點是否宕機而且須要重啓須要幾個哨兵協同判斷,當必定數量的哨兵(可配置) 認爲主節點宕機纔會去升級從節點
接下來談談redis的集羣模式markdown
redis集羣從多主多從共同支撐,至少須要三個主節點才能啓動集羣
每一個集羣包含 16384個槽 ,每個主(從節點負責同步主節點的數據)負責存儲其中的某一個槽,redis 經過對key的hash 肯定存儲在哪個槽上面,
當須要加入新的節點或者刪除節點的時候 ,redis 會去維護不一樣主節點上面的槽,從而從新分配槽的所屬
爲何redis哨兵集羣只有2個節點沒法正常工做?併發
哨兵集羣必須部署2個以上節點
若是哨兵集羣僅僅部署了個2個哨兵實例,quorum=1分佈式
+----+ +----+ | M1 |---------| R1 | | S1 | | S2 | +----+ +----+
Configuration: quorum = 1
master宕機,s1和s2中只要有1個哨兵認爲master宕機就能夠還行切換,同時s1和s2中會選舉出一個哨兵來執行故障轉移
同時這個時候,須要majority,也就是大多數哨兵都是運行的,2個哨兵的majority就是2(2的majority=2,3的majority=2,5的majority=3,4的majority=2),2個哨兵都運行着,就能夠容許執行故障轉移
可是若是整個M1和S1運行的機器宕機了,那麼哨兵只有1個了,此時就沒有majority來容許執行故障轉移,雖然另一臺機器還有一個R1,可是故障轉移不會執行
經典的3節點哨兵集羣ide
+----+ | M1 | | S1 | +----+ | +----+ | +----+ | R2 |----+----| R3 | | S2 | | S3 | +----+ +----+
Configuration: quorum = 2,majority
若是M1所在機器宕機了,那麼三個哨兵還剩下2個,S2和S3能夠一致認爲master宕機,而後選舉出一個來執行故障轉移
同時3個哨兵的majority是2,因此還剩下的2個哨兵運行着,就能夠容許執行故障轉移
https://mp.weixin.qq.com/s/o1BSWnFO-PGBrK8HwfA7Ywcode