Redis持久化機制在必定程度上緩解了宕機/重啓帶來的業務數據丟失問題,但當單實例所在的物理節點發生不可恢復故障時,如何保證業務數據不丟以及如何在故障期間迅速的恢復對應業務數據的可用性成爲單點結構的挑戰。緩存
在分佈式系統中爲了解決單點問題,Redis一般會把數據複製多個副本部署到其餘機器,知足故障恢復和負載均衡等需求。網絡
Redis根據版本的不一樣,提供了兩個命令分別是:sync和psync,其中當Redis版本小於2.8時,只能使用sync命令實現全量複製,而當Redis版本大於等於2.8時,可使用psync命令實現全量複製和部分複製,所以徹底可使用psync命令替代sync命令,由於psync命令提供的部分複製,可以有效的減小數據創傳輸開銷。接下來咱們分別來看下這兩個命令的具體實現原理。負載均衡
Redis包含master和slave兩種節點,master節點對外提供讀寫服務,slave節點擁有master節點的全量數據,對外不提供寫服務。主被複制由slave主動觸發,流程以下運維
另外須要注意的是,若是有多個slave節點發送sync命令給master,只要第二個slave的sync命令發生在master完成bgsave以前,第二個slave將收到和第一個slave相同的快照和後續backlog。不然,第二個slave的sync將觸發master的第二次bgsave。分佈式
從節點使用psync命令完成部分複製和全量複製功能,命令格式spa
psync {runid} {offset},其中runid是從節點複製主節點的運行id;offset是當前從節點已複製的數據偏移量。流程以下資源
master節點根據psync參數和自身數據狀況決定相應結果:開發
本文主要講了Redis提供的兩種複製流程:全量複製和部分複製,全量複製須要同步master節點的所有數據,大量消耗資源。而部分複製可以有效減小因網絡異常等緣由形成的沒必要要全量複製狀況。部署
《Redis開發與運維》《深刻分佈式緩存》同步