首頁 >資料庫 >Redis >redis集群原理

redis集群原理

(*-*)浩
(*-*)浩原創
2019-06-03 16:52:429783瀏覽

redis是一種典型的no-sql 即非關聯式資料庫像python的字典一樣儲存key-value鍵值對工作在memory中

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

redis集群原理

尤其是lnmp架構應用層如php-fpm或是Tomcat到mysql之間做一個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 負責維護node<->slot<->value

Redis叢集中內建了 16384個哈希槽,當需要在 Redis 集群中放置一個 key-value 時,redis 先對key 使用 crc16 演算法計算一個結果,然後將結果對 16384 求餘數,以便每個 key 間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點

以上是redis集群原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn