国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Redis 舊版復制功能的實現(xiàn)

2018-08-02 14:54 更新

Redis 的復制功能分為同步(sync)和命令傳播(command propagate)兩個操作:

  • 其中, 同步操作用于將從服務器的數(shù)據(jù)庫狀態(tài)更新至主服務器當前所處的數(shù)據(jù)庫狀態(tài)。
  • 而命令傳播操作則用于在主服務器的數(shù)據(jù)庫狀態(tài)被修改, 導致主從服務器的數(shù)據(jù)庫狀態(tài)出現(xiàn)不一致時, 讓主從服務器的數(shù)據(jù)庫重新回到一致狀態(tài)。

本節(jié)接下來將對同步和命令傳播兩個操作進行詳細的介紹。

同步

當客戶端向從服務器發(fā)送 SLAVEOF 命令, 要求從服務器復制主服務器時, 從服務器首先需要執(zhí)行同步操作, 也即是, 將從服務器的數(shù)據(jù)庫狀態(tài)更新至主服務器當前所處的數(shù)據(jù)庫狀態(tài)。

從服務器對主服務器的同步操作需要通過向主服務器發(fā)送 SYNC 命令來完成, 以下是 SYNC 命令的執(zhí)行步驟:

  1. 從服務器向主服務器發(fā)送 SYNC 命令。
  2. 收到 SYNC 命令的主服務器執(zhí)行 BGSAVE 命令, 在后臺生成一個 RDB 文件, 并使用一個緩沖區(qū)記錄從現(xiàn)在開始執(zhí)行的所有寫命令。
  3. 當主服務器的 BGSAVE 命令執(zhí)行完畢時, 主服務器會將 BGSAVE 命令生成的 RDB 文件發(fā)送給從服務器, 從服務器接收并載入這個 RDB 文件, 將自己的數(shù)據(jù)庫狀態(tài)更新至主服務器執(zhí)行 BGSAVE 命令時的數(shù)據(jù)庫狀態(tài)。
  4. 主服務器將記錄在緩沖區(qū)里面的所有寫命令發(fā)送給從服務器, 從服務器執(zhí)行這些寫命令, 將自己的數(shù)據(jù)庫狀態(tài)更新至主服務器數(shù)據(jù)庫當前所處的狀態(tài)。

圖 IMAGE_SYNC 展示了 SYNC 命令執(zhí)行期間, 主從服務器的通信過程。

表 TABLE_SYNC_EXAMPLE 展示了一個主從服務器進行同步的例子。

時間 主服務器 從服務器
T0 服務器啟動。 服務器啟動。
T1 執(zhí)行 SET k1 v1 。  
T2 執(zhí)行 SET k2 v2 。  
T3 執(zhí)行 SET k3 v3 。  
T4   向主服務器發(fā)送 SYNC 命令。
T5 接收到從服務器發(fā)來的 SYNC 命令, 執(zhí)行 BGSAVE 命令, 創(chuàng)建包含鍵 k1 、 k2 、 k3 的 RDB 文件, 并使用緩沖區(qū)記錄接下來執(zhí)行的所有寫命令。  
T6 執(zhí)行 SET k4 v4 , 并將這個命令記錄到緩沖區(qū)里面。  
T7 執(zhí)行 SET k5 v5 , 并將這個命令記錄到緩沖區(qū)里面。  
T8 BGSAVE 命令執(zhí)行完畢, 向從服務器發(fā)送 RDB 文件。  
T9   接收并載入主服務器發(fā)來的 RDB 文件 , 獲得 k1 、 k2 、 k3 三個鍵。
T10 向從服務器發(fā)送緩沖區(qū)中保存的寫命令 SET k4 v4 和 SET k5v5 。  
T11   接收并執(zhí)行主服務器發(fā)來的兩個 SET 命令, 得到 k4 和 k5 兩個鍵。
T12 同步完成, 現(xiàn)在主從服務器兩者的數(shù)據(jù)庫都包含了鍵 k1 、k2 、 k3 、 k4 和 k5 。 同步完成, 現(xiàn)在主從服務器兩者的數(shù)據(jù)庫都包含了鍵 k1 、 k2 、k3 、 k4 和 k5 。

命令傳播

在同步操作執(zhí)行完畢之后, 主從服務器兩者的數(shù)據(jù)庫將達到一致狀態(tài), 但這種一致并不是一成不變的 —— 每當主服務器執(zhí)行客戶端發(fā)送的寫命令時, 主服務器的數(shù)據(jù)庫就有可能會被修改, 并導致主從服務器狀態(tài)不再一致。

舉個例子, 假設一個主服務器和一個從服務器剛剛完成同步操作, 它們的數(shù)據(jù)庫都保存了相同的五個鍵 k1 至 k5 , 如圖 IMAGE_CONSISTENT 所示。

如果這時, 客戶端向主服務器發(fā)送命令 DEL k3 , 那么主服務器在執(zhí)行完這個 DEL 命令之后, 主從服務器的數(shù)據(jù)庫將出現(xiàn)不一致: 主服務器的數(shù)據(jù)庫已經(jīng)不再包含鍵 k3 , 但這個鍵卻仍然包含在從服務器的數(shù)據(jù)庫里面, 如圖 IMAGE_INCONSISTENT 所示。

為了讓主從服務器再次回到一致狀態(tài), 主服務器需要對從服務器執(zhí)行命令傳播操作: 主服務器會將自己執(zhí)行的寫命令 —— 也即是造成主從服務器不一致的那條寫命令 —— 發(fā)送給從服務器執(zhí)行, 當從服務器執(zhí)行了相同的寫命令之后, 主從服務器將再次回到一致狀態(tài)。

在上面的例子中, 主服務器因為執(zhí)行了命令 DEL k3 而導致主從服務器不一致, 所以主服務器將向從服務器發(fā)送相同的命令 DEL k3 : 當從服務器執(zhí)行完這個命令之后, 主從服務器將再次回到一致狀態(tài) —— 現(xiàn)在主從服務器兩者的數(shù)據(jù)庫都不再包含鍵 k3 了, 如圖 IMAGE_PROPAGATE_DEL_k3 所示。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號