這裏是修真院後端小課堂,每篇分享文從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層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可。