1. 程式人生 > >【修真院JAVA小課堂】redis快取叢集簡單介紹

【修真院JAVA小課堂】redis快取叢集簡單介紹

大家好,我是IT修真院鄭州分院第11期的JAVA學員,一枚正直純潔善良的java程式設計師。

今天給大家分享一下,redis快取叢集簡單介紹。

1.背景介紹

redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。redis的出現,很大程度補償了memcached這類key/value儲存的不足,在部分場合可以對關係資料庫起到很好的補充作用。

Redis 叢集是一個可以在多個 Redis 節點之間進行資料共享的設施。把多個redis例項整合在一起,形成一個叢集,也就是將資料分散到叢集的多臺機器上。當資料量過大一個主機放不下的時候,就需要對資料進行分割槽,將key按照一定的規則進行計算,並將key對應的value分配到指定的Redis例項上,這樣的模式簡稱Redis叢集。  

2.知識剖析

redis三種快取策略-主從複製

在主從複製中,資料庫分為倆類,主資料庫(master)和從資料庫(slave)。主資料庫可以進行讀寫操作,當讀寫操作導致資料變化時會自動將資料同步給從資料庫。從資料庫一般都是隻讀的,並且結束主資料庫同步過來的資料。一個master可以擁有多個slave,但是一個slave只能對應一個master。

當slave啟動後,主動向master傳送SYNC命令。master接收到SYNC命令後在後臺儲存快照(RDB持久化)和快取儲存快照這段時間的命令,然後將儲存的快照檔案和快取的命令傳送給slave。slave接收到快照檔案和命令後加載快照檔案和快取的執行命令。複製初始化後,master每次接收到的寫命令都會同步傳送給slave,保證主從資料一致性。   

redis三種快取策略-哨兵

哨兵的作用是監控 redis系統的執行狀況,功能有:監控主從資料庫是否正常執行 、master出現故障時,自動將slave轉化為master、多哨兵配置的時候,哨兵之間也會自動監控以及多個哨兵可以監控同一個redis

由一個或多個Sentinel 例項 組成的Sentinel 系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器。  

redis三種快取策略-叢集

Redis 叢集的分片特徵在於將鍵空間分拆了16384個槽位,每一個節點負責其中一些槽位。Redis提供一定程度的可用性,可以在某個節點宕機或者不可達的情況下繼續處理命令。Redis 叢集中不存在中心(central)節點或者代理(proxy)節點

總結下來,就是redis支援的cluster特性有:節點自動發現,線上分片,叢集容錯,基於配置的叢集管理

3.常見問題

1)redis叢集的具體搭建  

4.編碼實戰

5.擴充套件思考

redis叢集分片機制。

Redis 叢集沒有使用一致性hash, 而是引入了雜湊槽的概念。一個 Redis 叢集包含 16384 個雜湊槽(hash slot), 資料庫中的每個鍵都屬於這 16384 個雜湊槽的其中一個, 叢集使用公式 CRC16(key) % 16384 來計算鍵 key 屬於哪個槽, 其中CRC16(key) 語句用於計算鍵 key 的 CRC16 校驗和。每個key通過CRC16校驗後對16384取模來決定放置哪個槽.叢集的每個節點負責一部分hash槽。這種結構很容易新增或者刪除節點,並且無論是新增刪除或者修改某一個節點,都不會造成叢集不可用的狀態。

什麼時候整個叢集不可用

1)如果叢集任意master掛掉,且當前master沒有slave.叢集進入fail狀態,也可以理解成叢集的slot對映[0-16383]不完整時進入fail狀態. ps : redis-3.0.0.rc1加入cluster-require-full-coverage引數,預設關閉,開啟叢集相容部分失敗。 2)如果叢集超過半數以上master掛掉,無論是否有slave,叢集進入fail狀態.

6.參考文獻

7.更多討論

1)redis和mongoDB的區別

Redis主要把資料儲存在記憶體中,其“快取”的性質遠大於其“資料儲存“的性質,其中資料的增刪改查也只是像變數操作一樣簡單.適合較小資料量的效能和運算。

MongoDB卻是一個“儲存資料”的系統,增刪改查可以新增很多條件,就像SQL資料庫一樣靈活,海量資料的訪問效率提升。

2)redis支援事務麼?

支援事務,命令要不全部執行,要不不執行,但是,僅能能保證事務中的操作按順序執行。

3)redis叢集有核心節點嗎?

Redis-Cluster採用無中心結構,每個節點儲存資料和整個叢集狀態,每個節點都和其他所有節點連線。所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬。客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可。