介紹
Redis支持簡單的主從(master-slave)復制功能,當主Redis服務器更新數據時能將數據同步到從Redis服務器

配置
在Redis中使用復制功能非常容易
- 在從Redis服務器的redis.conf中寫入
slaveof masterip masterport即可,主Redis服務器不需要做任何配置 - 在啟動Redis服務器的時候,指定主服務器,
redis-server --slaveof masterip masterport - 在客戶端指定主服務器,
redis> SLAVEOF masterip masterport,SLAVEOF命令會停止與原有主服務器的同步,轉而向新主服務器進行同步
復制運行原理
當從Redis服務器啟動時會向主Redis服務器發送SYNC命令,主Redis服務器接收到SYNC命令后開始進行RDB持久化,並將這期間接收到的寫入操作命令都緩存起來,等RDB持久化完成后,將快照和緩存起來的命令一並發送給從Redis服務器,從Redis服務器接收到后開始載入快照和命令,這一過程稱之為復制初始化。復制初始化完成后,每當主Redis接收到寫入命令后,就會將命令同步給從Redis服務器,保證主從數據一致。

增量復制
在Redis2.6之前,主從斷開重連后,一定會進行一次快照操作然后將快照發送給從數據庫,即使斷開期間只有幾條命令被執行,這就使得斷開重連后的數據恢復過程效率很低。在Redis2.8之后,主從斷開重連后會根據斷開之前最新的命令偏移量進行增量復制
1)主服務器在同步命令到從服務器的時候,會先將命令放入一個緩沖隊列中並記錄一個復制偏移量,同時主從服務器都會記錄一個主服務器的運行ID。
2)當主從斷開重連后,會判斷主服務器保存的運行ID和從服務器發送過來的運行ID是否相同,相同則將從復制偏移量開始往后的所有命令一並發送給從服務器。如果不同,則進行一次復制初始化(將RDB快照和和這期間緩存起來的命令一並發送給主服務器)。
3)緩沖隊列的大小默認是1MB,可以在redis.conf中的配置項repl-backlog-size進行設置,還有一個配置項repl-backlog-ttl,表示當主從斷開后,緩沖隊列的緩存時間。

