redis主從複製過程: 當配置好slave後,slave與master創建鏈接,而後發送sync命令。不管是第一次鏈接仍是從新鏈接,master都會啓動一個後臺進程,將 數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存。後臺進程完成寫文件後,master就發送文件給slave,slave將 文件保存到硬盤上,再加載到內存中,接着master就會把緩存的命令轉發給slave,後續master將收到的寫命令發送給slave。若是master同時收到多個slave發來的同步鏈接命令,master只會啓動一個進程來寫數據庫鏡像,而後發送給全部的slave。master同步數據時是非阻塞式的,能夠接收用戶的讀寫請求。然而在slave端是阻塞模式的,slave在同步master數據時,並不可以響應客戶端的查詢。redis
能夠在master禁用數據持久化,只須要註釋掉master 配置文件中的全部save配置,而後只在slave上配置數據持久化。數據庫
若是Master和Slave之間的連接出現斷連現象,Slave能夠自動重連Master,可是在鏈接成功以後,一次徹底同步將被自動執行。緩存
上面的這5步是同步的第一階段,接下來在master服務器上調用每一個命令都在使用replicationFeedSlaves()來同步到slave服務器。bash
1.新建文件夾master-slave,在master-slave中新建master和slave,將redis.conf到master和slave文件夾中。服務器
2.修改master和slave的配置文件:端口號、進程文件和日誌文件的位置。測試
3.修改slave的配置文件:spa
slaveof <masterip> <masterport> # 指定master的ip和port
masterauth <master-password> # master有驗證的狀況下
slave-read-only yes # 設置slave爲只讀模式,默認的
複製代碼
4.分別進入到master和slave文件夾,啓動 redis服務:redis-server redis.conf日誌
5.客戶端鏈接code
查看master的信息,輸入 info,看到角色是mastercdn
查看slave的信息,輸入info,看到的角色是slave,且
6.測試
在master中添加數據:set name xbq
在slave中查詢數據:get name,結果和在master中插入的數據同樣。
測試下 在slave中添加數據:set address shenzheng,發現報錯,(error) READONLY You can't write against a read only slave.
這是由於 咱們設置了 slave爲只讀,不能夠操做寫。
1.用於對 數據的熱備份
2.用於讀寫分離