天天看點

Redis 的PSYNC指令

Redis 的PSYNC指令

從伺服器對主伺服器的複制分為初次複制和斷線後重複制,初次複制是從伺服器沒有複制過任何主伺服器或者從伺服器目前要複制的主伺服器和上一次複制的主伺服器不同

斷線後的重複制是處于指令傳播階段主從伺服器中斷了複制,從伺服器通過自動重連接配接重新連上主伺服器後繼續複制主伺服器。

SYNC複制指令是個很耗資源的操作,因為主伺服器需要執行BGSAVE指令來生成RDB檔案,這個生成操作耗費主伺服器大量的CPU、記憶體和磁盤IO資源,主伺服器将自己生成RDB檔案發送給從伺服器會耗費主從大量的網絡資源,對主伺服器響應指令請求的時間産生影響,接收RDB檔案的從伺服器需要載入主伺服器發來的RDB檔案,載入期間不能處理指令請求。

Redis 2.8以後使用PSYNC指令代替SYNC指令,PSYNC具有完整重同步和部分重同步,完整重同步用于處理初次複制,和SYNC指令步驟基本一樣,都是通過主伺服器建立并發送RDB檔案,向從伺服器發送儲存在緩沖區裡面的寫指令來進行同步,部分重同步用于處理斷線後重複制情況:當從伺服器在斷線後重新連接配接主伺服器時,主伺服器将主從伺服器連接配接斷開期間執行的寫指令發送給從伺服器,從伺服器隻要接收并執行這些寫指令就可以将資料庫更新到主伺服器目前狀态。

SYNC指令需要生成傳送和載入整個RDB檔案,而部分重同步隻需要将從伺服器缺少的寫指令發送給從伺服器執行。