Redis主從復制
一般來說析既,要將Redis運用于工程項目中笤虫,只使用一臺Redis是萬萬不能的抵拘,原因如下:
1.單臺Redis服務器會發(fā)生單點故障,且負載壓力較大寝杖;2.單臺Redis服務器容量有限违施。一般可以用Redis主從復制或者Redis集群解決這個問題,本文只討論Redis主從復制
主從復制優(yōu)點
- 提高服務器的負載能力瑟幕,可根據(jù)讀請求的規(guī)模自由增加或者減少從庫數(shù)量
- 數(shù)據(jù)多重備份
ps: 在Redis主從模式中磕蒲,一臺主庫可以擁有多個從庫,但是一個從庫只能隸屬于一個主庫
主從復制原理
當一個從數(shù)據(jù)庫啟動時只盹,會向主數(shù)據(jù)庫發(fā)送SYNC
命令辣往,主數(shù)據(jù)庫收到命令后會開始在后臺保存快照(即RDB持久化),并將保存快照期間接收的命令緩存起來鹿霸。當快照完成時排吴,Redis將快照文件和緩存文件命令發(fā)給從數(shù)據(jù)庫,從數(shù)據(jù)庫載入快照文件并執(zhí)行緩存命令懦鼠。以上過程稱為復制初始化钻哩。復制初始化結(jié)束之后屹堰,主數(shù)據(jù)庫每收到寫命令就會將命令同步給從數(shù)據(jù)庫,從而保證主從數(shù)據(jù)一致街氢,這一過程稱為復制同步階段扯键。
主從復制配置
- 只需在從數(shù)據(jù)庫的配置文件中,加上如下命令:
slaveof 主數(shù)據(jù)庫地址 主數(shù)據(jù)庫端口
- 如果主數(shù)據(jù)庫需要密碼登陸時珊肃,還需加上:
asterauth password
- 可通過如下命令查看當前實例在復制系統(tǒng)中的相關(guān)信息:
info replication
- 默認情況下荣刑,從庫只能讀取數(shù)據(jù),不能寫入數(shù)據(jù)伦乔,但是可以在從庫的配置文件中加上如下配置項允許從庫寫數(shù)據(jù):
slave-read-only no
- 要想斷開當前數(shù)據(jù)庫與主庫的連接厉亏,并且和新數(shù)據(jù)庫進行同步,只需在客戶端執(zhí)行以下命令即可:
slaveof 新主庫地址 新主庫端口
- 想停止接收其他數(shù)據(jù)庫的同步烈和,將當前數(shù)據(jù)庫升級為主庫爱只,只需在客戶端執(zhí)行:
slaveof no one
- 當主數(shù)據(jù)庫寫完數(shù)據(jù),準備同步到從服務器時招刹,從服務器斷掉與主服務器的連接恬试,為了保證數(shù)據(jù)的一致性,可通過配置以下參數(shù)疯暑,限制當前只有n或者n個以上的從服務器連接到主庫训柴,主數(shù)據(jù)庫才可寫:
min-slaves-to-write
Redis分區(qū)
分區(qū)概念
分區(qū)是將數(shù)據(jù)分割到不同的Redis實例的過程,每個Redis實例只包含所有key的一部分(子集)妇拯。
分區(qū)優(yōu)點
- 數(shù)據(jù)存儲更有規(guī)律
- 整合了多個服務器的存儲空間幻馁、計算能力、網(wǎng)絡帶寬等
分區(qū)缺點
- 不能操作存儲在不同實例的key乖阵,比如無法匹配存儲在兩個不同實例的集合的交集
- Redis事務涉及到多個鍵不能使用
- 分區(qū)使得數(shù)據(jù)處理更復雜宣赔,比如備份數(shù)據(jù)需要備份每個實例服務器上的所有數(shù)據(jù)
- 增加或刪除容量比較復雜
分區(qū)類型(分區(qū)規(guī)則)
- 范圍分區(qū),將一定范圍內(nèi)的對象映射到特定的Redis實例
- 哈希分區(qū)瞪浸,根據(jù)HASH算法儒将,均勻的將數(shù)據(jù)映射到不同的實例
分區(qū)的實現(xiàn)
- 通過代碼層實現(xiàn)算法,手動將對象分配到特定的實例
- 通過某些具有分區(qū)功能的客戶端对蒲,由客戶端直接選擇正確的節(jié)點钩蚊,將
key
存到相應實例中 - client將請求發(fā)送到代理,由代理分配節(jié)點蹈矮,存儲key到實例中