reids在2.8版本增加了部分復制功能,在一些場景中代替了全量復制,提高了復制的效率。
1、全量復制
1)slave向master發(fā)送SYNC命令,master執(zhí)行BGSAVE命令生成RDB文件。
2)master將生成的RDB文件發(fā)送給slave。
3)slave載入RDB文件到內存。
4)master將執(zhí)行SYNC命令之后收到寫命令記錄到緩存中,并將這些命令發(fā)送給slave。
可以看出,全量復制會消耗大量的CPU,內存,磁盤IO,網絡資源,因而應該盡量減少使用全量復制。
2、部分復制
部分復制主要在內存中緩存了一些最近的復制命令,當出現(xiàn)網絡問題時,slave重新連接上master的時候,master會根據(jù)slave發(fā)送的復制偏移量來決定是進行部分復制還是全量復制。
1)復制偏移量
master向slave傳播命令的時候會更新自己的偏移量,slave在收到命令后也會更新自己的偏移量。
2)復制緩沖區(qū)
master會維護一個固定長度的FIFO隊列,默認大小是1M,當master進行命令傳播后會將這個命令加入到復制緩沖區(qū)中。
3)服務器運行ID
每個redis服務啟動時會自動生成一個40位的ID,slave斷線重新連接上master開始復制時會發(fā)送這個ID,master根據(jù)這個ID判斷是否是自己,如果不是自己則也需要進行全量復制。