redis集群原理

redis是一種典型的no-sql 即非關系數據庫python的字典一樣 存儲key-value鍵值對 工作在memory中

所以很適合用來充當整個互聯網架構中各級之間的cache 比如lvs的4層轉發層 nginx的7層代理層

redis集群原理

尤其是lnmp架構應用層如php-fpm或者是tomcatmysql之間 做一個cache 以減輕db的壓力

因為有相當一部分的數據 只是簡單的key-value對應關系,而且在實際的業務中常常在短時間內迅速變動?

如果用關系數據庫mysql之類存儲 會大大增加對db的訪問 導致db的負擔很重 因為所有的require中的大部分最后都要匯聚到db

所以如果想要業務穩定 那么解決db的壓力 就是關鍵 所以現在大部分的解決方案就是在db層之上的各級使用多級的no-sql?

memcache redis 等 來為db提供緩沖??

Redis集群

Redis 集群是一個可以在多個 Redis 節點之間進行數據共享的設施installation。

Redis 集群不支持那些需要同時處理多個鍵的 Redis 命令, 因為執行這些命令需要在多個 Redis 節點之間移動數據, 并且在高負載的情況下, 這些命令將降低Redis集群的性能, 并導致不可預測的行為。

Redis 集群通過分區partition來提供一定程度的可用性availability: 即使集群中有一部分節點失效或者無法進行通訊, 集群也可以繼續處理命令請求。

Redis集群提供了以下兩個好處:

將數據自動切分split到多個節點的能力。

當集群中的一部分節點失效或者無法進行通訊時, 仍然可以繼續處理命令請求的能力。

集群原理

所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬。

節點的fail是通過集群中超過半數的節點檢測失效時才生效。

客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可。

redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster?負責維護nodeslotvalue

Redis集群中內置了?16384?個哈希槽,當需要在?Redis?集群中放置一個?key-value?時,redis?先對key?使用?crc16?算法算出一個結果,然后把結果對?16384?求余數,這樣每個?key?都會對應一個編號在?0-16383?之間的哈希槽,redis?會根據節點數量大致均等的將哈希槽映射到不同的節點

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享