redis快取叢集簡單介紹
這裡是修真院後端小課堂,每篇分享文從
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】
八個方面深度解析後端知識/技能,本篇分享的是:
【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.參考文獻
https://blog.csdn.net/q649381130/article/details/79931791
https://blog.csdn.net/yinbucheng/article/details/72808900
http://www.cnblogs.com/gossip/p/5990305.html
7.更多討論
1)redis和mongoDB的區別
Redis主要把資料儲存在記憶體中,其“快取”的性質遠大於其“資料儲存“的性質,其中資料的增刪改查也只是像變數操作一樣簡單.適合較小資料量的效能和運算。
MongoDB卻是一個“儲存資料”的系統,增刪改查可以新增很多條件,就像SQL資料庫一樣靈活,海量資料的訪問效率提升。
2)redis支援事務麼?
支援事務,命令要不全部執行,要不不執行,但是,僅能能保證事務中的操作按順序執行。
3)redis叢集有核心節點嗎?
Redis-Cluster採用無中心結構,每個節點儲存資料和整個叢集狀態,每個節點都和其他所有節點連線。所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬。客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可。
更多內容,可以加入IT交流群565734203與大家一起討論交流
這裡是技能樹·IT修真院:https://www.jnshu.com,初學者轉行到網際網路的聚集地