1. 程式人生 > >redis學習筆記(九): replication

redis學習筆記(九): replication

mas server 完整 開始 客戶端 生成 查看 兩種 partial

replication的代碼還沒完全看完,先記錄看到的一些東西:

1、master/slave之間的同步有兩種方式,一種full sync,一種partial sync

2、full sync也有兩種實現方式:

  1). socket target,就是將rdb的內容通過socket回復給執行sync命令的slave

  2). disk target,就是master這端先在後臺執行bgsave的過程生成rdb file,執行完成之後,再將rdb file的內容回復給slave

  從上面兩種方式的實現可以看出一點區別:

  比如,master收到一條sync命令,如果master正在執行socket target的bgsave工作,那麽這個新的sync命令必須等到當前socket target的bgsave做完,才能開始新一輪的bgsave工作。

但是,如果master正在執行的是disk target的bgsave工作,那麽這個新的sync命令有可能(還有一個capability的因素在裏面)可以直接利用這一輪bgsave得到的rdb file返回給slave。

3、partial sync的實現方式大致是這樣:當server第一次收到sync/psync命令時,server會新分配一個repl_backlog的buf(這塊buf的大小可以配置),一個隨機的串做為replid。

  第一個psync的命令是當做full sync來做的。後面在一些特定的時候會往這個buf裏面寫入內容(可能是一些完整的命令)。client執行psync的時候會帶上相應的偏移,server就把repl_buf

  中指定偏移開始的所有內容回復給client

4、對於full sync,不管是disk target還是socket target,在執行完bgsave之後,都會調用updateSlavesWaitingBgsave去查看是否需要開啟新的bgsave流程

幾個問題:

1、多個客戶端同時執行sync的話,server上的執行流程是怎麽樣的?

2、MULTI裏面能執行sync命令嗎?

redis學習筆記(九): replication