集群要實現的目的是要將不同的 key 分散放置到不同的 redis 節點,這裡我們需要乙個規則或者演算法,
通常的做法是獲取 key 的雜湊值,然後根據節點數來求模,但這種做法有其明顯的弊端,當我們需要增加或減少乙個節點時,會造成大量的 key 無法命中,這種比例是相當高的,所以就有人提出了一致性雜湊的概念。
一致性雜湊有四個重要特徵:
均衡性:也有人把它定義為平衡性,是指雜湊的結果能夠盡可能分布到所有的節點中去,這樣可以有效的利用每個節點上的資源。
單調性:當節點數量變化時雜湊的結果應盡可能的保護已分配的內容不會被重新分派到新的節點。
分散性和負載:這兩個其實是差不多的意思,就是要求一致性雜湊演算法對 key 雜湊應盡可能的避免重複。
但是:redis 集群沒有使用一致性hash, 而是引入了雜湊槽的概念。
使用雜湊槽的好處就在於可以方便的新增或移除節點。
當需要增加節點時,只需要把其他節點的某些雜湊槽挪到新節點就可以了;
當需要移除節點時,只需要把移除節點上的雜湊槽挪到其他節點就行了;
redis-cluster
redis的哨兵模式基本已經可以實現高可用,讀寫分離,但是在【這種模式下每台redis伺服器都儲存相同的資料】,很浪費記憶體,所以在【redis3.0上加入了cluster模式,實現的redis的分布式儲存】,【也就是說每台redis節點上儲存不同的內容】。
redis-cluster採用無中心結構,它的特點如下:
1.【所有的redis節點彼此互聯(ping-pong機制)】,內部使用二進位制協議優化傳輸速度和頻寬。
2. 節點的fail是通過集群中【超過半數的節點檢測失效】時才生效。
3. 客戶端與redis節點直連,不需要中間**層。客戶端不需要連線集群所有節點,【客戶端連線集群中任何乙個可用節點即可】。
redis-cluster把所有的物理節點對映到[0-16383]slot上(不一定是平均分配),cluster負責維護node<->slot<->value。
redis集群預分好16384個桶,當需要在redis集群中放置乙個key-value 時,【根據crc16(key) mod 16384的值,決定將乙個key放到哪個桶中】。
要讓集群正常工作至少需要3個主節點,一共就需要6個節點,其中3個為主節點,3個為從節點
參考:
Redis儲存Tomcat集群的Session
redis儲存tomcat集群的session 如何 做到把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。設想 那麼問題來了 在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下面 我們用例項來說明此方案。我們的例...
Redis 資料儲存
qq1413139134 2015 12 23 15 25 00 瀏覽5527 雲資料庫redis版 摘要 redis是一款支援多種資料型別的key value資料庫。這裡介紹下如何從redis中匯出資料。資料是如何儲存的?redis中是把資料儲存到記憶體中的,但是它也會定期的把資料寫會到硬碟中。r...
用Redis儲存Tomcat集群的Session
前段時間,我花了不少時間來尋求一種方法,把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。那麼問題來了,在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下面,我們用例項來說明此方案。我們的例子使用了一台nginx做...