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