更新時間:2021-11-22 10:50:24 來源:動力節點 瀏覽1792次
很多小伙伴對Redis同步數據庫的實現方法不是很了解,小編來為大家講解一下,Redis的主從同步機制可以確保redis的master和slave之間的數據同步。
同步方式包括:全量復制和增量復制
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執行完畢,向slave發送rdb文件。rdb文件發送完畢后,開始向slave發送緩沖區中的寫命令。
slave收到rdb文件,丟棄所有舊數據,開始載入rdb文件。
rdb文件同步結束之后,slave執行從master緩沖區發送過來的所以寫命令。
此后 master 每執行一個寫命令,就向slave發送相同的寫命令。
如果出現網絡閃斷或者命令丟失等異常情況時,當主從連接恢復后,由于從節點之前保存了自身已復制的偏移量和主節點的運行ID。因此會把它們當作psync參數發送給主節點,要求進行部分復制操作,格式為psync {runId} {offset}。
主節點接到psync命令后首先核對參數runId是否與自身一致,如果一致,說明之前復制的是當前主節點;之后根據參數offset在自身復制積壓緩沖區查找,如果偏移量之后的數據存在緩沖區中,則對從節點發送+continue響應,表示可以進行部分復制;否則進行全量復制。
主節點根據偏移量把復制積壓緩沖區里的數據發送給從節點,保證主從復制進入正常狀態。
通過上述介紹,相信大家對Redis同步數據庫的實現方法已經有所了解,大家如果想了解更多相關知識,不妨來關注一下動力節點的Java在線學習,里面的內容豐富,從淺到深,適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習