首頁  >  文章  >  資料庫  >  redis怎麼實現資料同步

redis怎麼實現資料同步

(*-*)浩
(*-*)浩原創
2019-11-20 13:27:315881瀏覽

redis怎麼實現資料同步

Redis的主從同步機制可以確保redis的master和slave之間的資料同步。

同步方式包括:全量複製與增量複製                             時(建議中學習:Redis 教學課程##1#全數#全數#」總量

1#高五看到平均數位圖

##硬筆」)##1

redis怎麼實現資料同步

slave第一次啟動時,連接Master,發送PSYNC指令,格式為psync {runId} {offset}

{runId} 为master的运行id;{offset}为slave自己的复制偏移量。
slave第一次连接master时,slave并不知道master的runId,也不知道自己偏移量,这时候slave会传一个问号和-1,告诉master节点是第一次同步。格式为psync ? -1

當master接收psync ? -1時,知道slave是要全量複製,就會將自己的runId和offset告知slave,回覆指令fullresync {runId} {offset}。同時,master會執行bgsave指令來產生rdb文件,期間的所有寫入指令將會被寫入緩衝區。

slave接受到master的回复命令后,会保存master的runId和offset,slave此时处于同步状态。
slave处于同步状态,如果此时收到请求,当配置参数slave-server-stale-data yes时,会响应当前请求;slave-server-stale-data no,返回错误。

master bgsave執行完畢,傳送rdb檔給slave。 rdb檔案發送完畢後,開始向slave發送緩衝區中的寫入指令。

slave收到rdb文件,丟棄所有舊數據,開始載入rdb檔案。

rdb檔案同步結束之後,slave執行從master緩衝區發送過來的所以寫指令。

此後 master 每執行一個寫入指令,就傳送相同的寫入指令給slave。

增量拷貝

如果出現網路閃斷或命令遺失等異常情況時,當主從連線恢復後,由於從節點之前保存了自身已複製的偏移量和主節點的運行ID。因此會把它們當作psync參數傳送給主節點,要求進行部分複製操作,格式為psync {runId} {offset}。

主節點接到psync指令後首先核對參數runId是否與自身一致,如果一致,說明之前複製的是當前主節點;之後根據參數offset在自身複製積壓緩衝區查找,如果偏移量之後的資料存在緩衝區中,則對從節點發送continue回應,表示可以進行部分複製;否則進行全量複製。

主節點根據偏移量把複製積壓緩衝區裡的資料傳送給從節點,確保主從複製進入正常狀態。

以上是redis怎麼實現資料同步的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn