1照雁、Redis支持主從(master-slave)復(fù)制功能孕暇,當(dāng)主服務(wù)器更新數(shù)據(jù)時(shí)能同步到從服務(wù)器
(1)在從Redis服務(wù)器的redis.conf中添加slaveof masterip masterport即可主Redis服務(wù)器不需要做任何配置
(2)在啟動(dòng)Redis服務(wù)器時(shí)指定主服務(wù)器 redis-server -- slave materip masterport
(3)在客戶端指定主服務(wù)器redis>slaveof masterip masterport SLAVEOF命令會(huì)會(huì)停止與原主服務(wù)器的同步澈侠,轉(zhuǎn)向新的主服務(wù)器同步
原理
(1)Redis主服務(wù)器等待命令SYNC的進(jìn)入菩鲜,Redis從服務(wù)(連接或重新連接)發(fā)送SYNC命令
(2)Redis主服務(wù)接受SYNC命令后開始執(zhí)行BGSAVE命令罩引,并使用緩沖區(qū)記錄BGSAVE之后執(zhí)行所有的寫命令哀蘑,從服務(wù)跟配置選項(xiàng)來(lái)決定是否使用現(xiàn)有的數(shù)據(jù)來(lái)處理客戶端的命令請(qǐng)求厘贼,還是向發(fā)送請(qǐng)求的客戶端返回錯(cuò)誤
(3)主服務(wù)器執(zhí)行BGSAVE完畢之后 向從服務(wù)發(fā)送快照文件界酒,并在發(fā)送期間繼續(xù)使用緩沖區(qū)記錄被執(zhí)行的寫命令,此時(shí)從服務(wù)丟棄所有舊數(shù)據(jù),開始載入主服務(wù)器發(fā)來(lái)的快照文件
(4)主服務(wù)器快照文件發(fā)送完畢嘴秸,開始向從服務(wù)器發(fā)送存儲(chǔ)在緩沖區(qū)里的寫命令毁欣,從服務(wù)器完成對(duì)快照文件的解釋操作,像往常一樣開始接收命令請(qǐng)求
(5)主服務(wù)器緩沖區(qū)存儲(chǔ)的寫命令發(fā)送完畢岳掐;從現(xiàn)在開始沒執(zhí)行一條命令凭疮,就向從服務(wù)器發(fā)送同樣的命令,從服務(wù)器執(zhí)行完主服務(wù)器發(fā)來(lái)
的存儲(chǔ)在緩沖區(qū)的寫命令串述,并從現(xiàn)在開始执解,執(zhí)行主服務(wù)器發(fā)來(lái)的每一個(gè)寫命令。
注:從服務(wù)在進(jìn)行同步時(shí),會(huì)清空自己的所有數(shù)據(jù)衰腌,從服務(wù)器在和主服務(wù)器進(jìn)行初始連接時(shí)新蟆。數(shù)據(jù)庫(kù)原有的所有數(shù)據(jù)將都丟失,并替換成主服務(wù)器發(fā)來(lái)的數(shù)據(jù)
redis驗(yàn)證快照文件和AOF文件兩個(gè)命令程序:
redis-check-aof --fix <file.aof> 命令會(huì)掃描給定 的aof文件 尋找不正確的命令 找到第一個(gè)出錯(cuò)的命令后 會(huì)刪除之后的所有命令,只保留出錯(cuò)命令之前的命令右蕊,大多數(shù)情況都是刪除AOF文件末尾不完整的命令琼稻。