http://redis.io/topics/partitioning
分片
我經(jīng)歷的項目中把redis僅僅當(dāng)做內(nèi)存緩存肛度、沒有開啟持久化
為什么用集群?
高可用只酥、高性能娃胆、高可擴(kuò)展
高可用如何實現(xiàn)遍希?
冗余存儲(保證不丟失)+主備切換
分片(即使節(jié)點掛了也是之丟失部分?jǐn)?shù)據(jù))
高性能如何實現(xiàn)?
分片(降低單節(jié)點的負(fù)載)
高可擴(kuò)展如何實現(xiàn)里烦?
分片(加機(jī)器)
1:客戶端分布式
memcache可以這么做
一致性hash
多個redis server相互獨立
缺點:增刪機(jī)器需要修改客戶端設(shè)置孵班、數(shù)據(jù)丟失
2:通過代理
Twemproxy
Codis
缺點:多了一層有性能損失
呵呵,關(guān)于 Twemproxy和Codis的比較招驴,可以看看Codis文檔
https://github.com/CodisLabs/codis
當(dāng)然篙程,有些命令和功能,并不支持
3:Redis cluster
沒有中心節(jié)點别厘、Redis Cluster將所有Key映射到16384個Slot中虱饿,集群中每個Redis實例負(fù)責(zé)一部分,業(yè)務(wù)程序通過集成的Redis Cluster客戶端進(jìn)行操作
客戶端可以向任一實例發(fā)出請求触趴,如果所需數(shù)據(jù)不在該實例中氮发,則該實例引導(dǎo)客戶端自動去對應(yīng)實例讀寫數(shù)據(jù)。Redis Cluster的成員管理(節(jié)點名稱冗懦、IP爽冕、端口、狀態(tài)披蕉、角色)等颈畸,都通過節(jié)點之間兩兩通訊,定期交換并更新
能做分片没讲?能冗余數(shù)據(jù)眯娱?能故障自動切換?
Redis Sentinel:
復(fù)制+Sentinel集群
多個Sentinel節(jié)點(Sentinel集群)監(jiān)視多個主服務(wù)器以及每個主服務(wù)器的從節(jié)點爬凑。
主服務(wù)器下線之后(如何判斷下線徙缴?每個sentinel節(jié)點可能觀察到的不一樣∴倚牛可以配置一個策略比如超過幾個sentinel節(jié)點判斷主節(jié)點下線那就認(rèn)為主節(jié)點確實已經(jīng)下線)于样,sentinel集群會選舉(如何選舉呢疏叨?)一個從節(jié)點變?yōu)橹鞴?jié)點并進(jìn)行一些各個節(jié)點狀態(tài)數(shù)據(jù)的設(shè)置(具體的操作是由sentinel集群中選舉出來的領(lǐng)頭sentinel節(jié)點)