一、複製基本配置與示範
為了避免單點故障,Redis提供了複製功能,可以實現自動同步的過程。
1、配置
同步後的資料分為兩類:一類是主要資料庫(master),一類是從資料庫(slave)。主要資料庫可以進行讀寫操作,當發生寫操作時自動將資料同步給從資料庫。而從資料一般唯讀,並接受主要資料庫同步過來的資料。
在Redis使用複製功能,只需要在從資料庫的設定檔中加入"salveof 主要資料庫IP 主要資料庫連接埠"即可,主要資料庫無需進行任何配置。
2、Redis複製示範
下面我們在同一台伺服器上啟動兩個Redis執行個體,監聽不同的連接埠,其中一個作為主要資料庫,另一個作為從資料庫。
首先,我們要複製一個Redis服務的設定檔,並取名為redis6380.conf。
我們修改redis6380.conf設定檔中的連接埠號碼為6380,並且配置改Redis執行個體為主要資料庫的從資料庫。
配置從資料庫
接著,我做了兩個啟動Redis的bat批次檔,用於啟動兩個Redis資料庫:
內容分別是:
redis-server redis.windows.conf //啟動主要資料庫
redis-server redis6380.conf //啟動從資料庫
現在我們啟動主從資料庫的用戶端:
主要資料庫的用戶端就在Redis的安裝目錄下,雙擊redis-cli.exe即可。
從資料庫的啟動,我們開啟cmd,進入Redis的目錄,輸入
這樣,我們就有了兩個Redis資料庫服務端和用戶端,下面就來示範複製的功能:
首先,在主要資料庫中輸入
然後,在從資料庫的用戶端,我們進行查詢操作
可以看到,在從資料庫中擷取的name屬性的值。
注:除了通過設定檔或命令列設定slaveof參數,還可以在運行時使用slaveof命令修改:
如果該資料庫已經是其他主要資料庫的從資料庫了,slaveof命令會停止和原來的資料庫的同步轉而和新的資料庫進行同步。
二、複製原理
當一個資料庫啟動後,會向主要資料庫發送SYNC命令,主要資料庫收到SYNC命令後開始在後台儲存快照,並將儲存期間收到的命令緩衝起來。當快照完成後,Redis會將快照檔案和所有的緩衝的命令發送給從資料庫,從資料庫接收到後,會載入快照檔案並執行收到的緩衝的命令。當主從資料庫斷開重連後會重新執行上述操作。
三、從資料庫持久化
為了提高效能,可以通過複製功能簡曆若干個從資料庫,並在從資料庫中啟用持久化,同時在主要資料中禁用持久化。當從資料庫崩潰時重啟後主要資料會自動將資料同步過來,所以無需擔心資料丟失。而當主要資料庫崩潰時,需要在從資料庫中使用slaveof no one 命令將從資料庫提升為主要資料繼續服務,並將原來的主要資料庫啟動後使用slaveof命令將其設定為新的主要資料庫的從資料庫,即可將新的資料同步過來