redis緩存集羣簡單介紹

這裏是修真院後端小課堂,每篇分享文從html

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】java

八個方面深度解析後端知識/技能,本篇分享的是:程序員

【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存儲的不足,在部分場合能夠對關係數據庫起到很好的補充做用。memcached

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/q649381...

https://blog.csdn.net/yinbuch...

http://www.cnblogs.com/gossip...

 

7.更多討論

1)redis和mongoDB的區別

Redis主要把數據存儲在內存中,其「緩存」的性質遠大於其「數據存儲「的性質,其中數據的增刪改查也只是像變量操做同樣簡單.適合較小數據量的性能和運算。

MongoDB倒是一個「存儲數據」的系統,增刪改查能夠添加不少條件,就像SQL數據庫同樣靈活,海量數據的訪問效率提高。

 

2)redis支持事務麼?

支持事務,命令要不所有執行,要不不執行,可是,僅能能保證事務中的操做按順序執行。

 

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

Redis-Cluster採用無中心結構,每一個節點保存數據和整個集羣狀態,每一個節點都和其餘全部節點鏈接。全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬。客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可。

相關文章
相關標籤/搜索