Redis的主從複製機制是指可讓從服務器(slave)能精確複製主服務器(master)的數據,以下圖所示:數據庫
或者 服務器
Redis主從複製主要有兩種模式:完整重同步(full resynchronization)和部分重同步(partial resynchronization)網絡
完整同步機制,咱們很是好理解。好比從機首次鏈接到主機後,那麼就是完整同步了。此時主機把RDB文件打包發送給從機,從機同步便可。併發
若是在此期間,主機源源不斷的有新的命令,那麼所有放入到緩衝區中,而後進行部分同步,將緩衝區裏面的數據發送給從機便可。blog
部分同步還有一種使用狀況就是,網絡不穩定,斷了以後,從機和主機的同步。也是用到了部分同步機制。隊列
部分重同步功能由如下三個部分構成:同步
執行復制的雙方——主服務器和從服務器會分別維護一個複製偏移量:io
經過對比主從服務器的複製偏移量,程序能夠很容易地知道主從服務器是否處於一致狀態:ast
以下面的狀況:class
若是發現偏移量不同,那麼就會須要用到緩衝區了。
複製積壓緩衝區是由主服務器維護的一個固定長度(fixed-size)先進先出(FIFO)隊列,默認大小爲1MB。
當主服務器進行命令傳播時,它不只會將寫命令發送給全部從服務器,還會將寫命令入隊到複製積壓緩衝區裏面,如圖所示。
當從服務器從新連上主服務器時,從服務器會經過PSYNC命令將本身的複製偏移量offset發送給主服務器,主服務器會根據這個複製偏移量來決定對從服務器執行何種同步操做:
除了複製偏移量和複製積壓緩衝區以外,實現部分重同步還須要用到服務器運行ID(run ID):