簡單來說:Redis的增量同步是怎么一回事

簡單來說:

增量同步就是Master 只把比 Slave 新的數據發給 Slave,而不是發送全部數據。它像一個持續更新的直播流,或者我之前比喻的“每日更新期刊”。Slave 不用重新加載所有數據,只需要接收和應用這些新的更新。

這就像,你作家寫的書,讀者已經拿到了完整的最新版。你以后每天寫點新東西,只需要把寫的新章節發給他,他就能把新的章節加到書的后面,就不用我把整本書再重新打印一遍然后麻煩他再讀一遍了。

為什么需要增量同步?

想象一下,你寫一部百萬字的小說,每天寫幾百字。如果每次粉絲(Slave)斷線(比如手機信號不好,或者中途APP閃退了一下),然后他再連回來,你都得把這幾百萬字的完整小說重新給他背一遍,那得多麻煩?流量、時間和資源都會大量浪費。

增量同步就是為了解決這個問題:減少全量同步的次數,提高復制效率。

增量同步的核心部件:

在 Redis 中,實現增量同步有兩個關鍵的協同工作部分:

  1. Master 的 Replication Backlog (復制積壓緩沖區):

    • 這是一個特殊的“草稿箱”。你(作家 Master)每寫好一句(執行一條寫命令),除了發送給粉絲(如果有粉絲連接著),你還會把它暫時副本放在這個“草稿箱”里。
    • 這個草稿箱是環形的,就像一個循環錄像帶。它有一個固定的大小(可以配置,默認是 1MB),當寫的內容越來越多時,最老的內容就會被新內容覆蓋掉
    • 這個草稿箱就是為了當你和粉絲(Master 和 Slave)的直播連接意外斷開后,再重新連接時,可以方便地找到“從哪個位置(offset)開始發送新的更新”。
  2. Replication Offset (復制偏移量):

    • 這是一個“閱讀進度條”。你把寫好的內容一句一句地發出去了,你會記錄你已經發了多少字(Master 的最新偏移量)。
    • 你的每個粉絲(Slave)也會記錄自己已經收到了多少字
    • 這個偏移量是一個單調遞增的數字。它精確標識了主服務器數據流中某個點。Master 知道自己發到了哪里,Slave 知道自己收到了哪里。
  3. Master Replication ID (replid/runid):

    • 你的“作家筆名 ID”(或者你的身份證號)。在你沒換筆名(Master 非重啟,或者故障轉移)的情況下,即使你暫停寫作(數據有一段時間沒更新),在“筆名”不變的前提下,你上次的寫作“風格”(數據特征)也還在。
    • 這是判斷 Master 身份唯一性的關鍵。只有 Master ID 沒變動,增量同步才有基礎。
增量同步是如何進行的?
  1. Slave 斷線重連時(比如因網絡波動):

    • 粉絲(Slave)與你(Master)的電話斷了。但是,他知道自己上次是“鬼才金庸”(Master replid)的讀者,而且已經看完了第 130 章(offset)。
    • 當連接恢復后,粉絲立即打電話(發送 PSYNC <replid> <offset> 命令)給你,并說:“我是老粉絲,筆名是‘鬼才金庸’,我上次看到第 130 章了。”
  2. Master 的判斷:

    • 第一步:檢查筆名 ID(replid)。你(Master)發現電話里說的筆名 ID 和你當前使用的筆名 ID 是一模一樣的。
      • “嗯,沒換筆名,還是我的老讀者!”
    • 第二步:檢查閱讀進度 (offset) 是否在草稿箱 (Backlog) 里。 你(Master)馬上去檢查你的“草稿箱”(Replication Backlog)。
      • 你發現你的草稿箱里保存了從第 120 章到當前你最新寫的第 140 章的所有內容。
      • 而粉絲小明說他看到第 130 章了。
      • “太好了!你說的 130 章后面的那點更新(第 131 章到第 140 章我最新寫的部分),都在我的草稿箱里呢,沒被新的內容擠出去!”
  3. 增量發送:

    • 你(Master)立刻告訴粉絲:“好啦,第 131 章到第 140 章的更新,我現在就報給你聽!” (Master 回復 +CONTINUE,然后直接從 Replication Backlog 中提取offset 130之后的數據,以 AOF 命令流的形式發送給 Slave。)
    • 粉絲(Slave)收到后,將其追加到自己的小說集后面,并更新自己的閱讀進度(offset)。
動圖模擬增量同步:

假設 offset 代表數據寫入進程,Master 從 0 開始不斷增加。
Replication Backlog 是一個固定大小的窗口,里面保存了最近的歷史數據。

時間軸 -->Master 數據寫入: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...]
Master 當前 Offset: 11Replication Backlog (假設大小為 5): [ 7, 8, 9, 10, 11 ] ^ 最老  ^ 最新Slave A (上次收到 9): 連接 - PSYNC <replid> 9Master 檢查: replid 匹配,9 在 Backlog 內。?Master 回復: +CONTINUEMaster 發送增量: [10, 11]
Slave A 更新到 11。成功增量同步!Slave B (上次收到 5):連接 - PSYNC <replid> 5Master 檢查: replid 匹配,但 5 不在 Backlog 內 [7, 8, 9, 10, 11]。?Master 回復: +FULLRESYNC ...Master 執行: 全量同步 (生成 RDB, 再發送從新 RDB 點開始的 AOF)
Slave B 更新到 11。被迫全量同步!
需要注意:
  • Replication Backlog 的大小配置很關鍵。 如果這個緩沖區太小,Slave 稍微掉隊一點(斷線時間稍長一點),其 offset 就會超出緩沖區范圍,導致增量同步失敗,仍然退化為全量同步。所以需要根據網絡情況和應用的寫入 QPS(每秒查詢率)來合理估算和設置這個積壓緩沖區的大小。通常建議設置為 Slave 在斷線重連前可能積累的最大寫命令量。
  • 如果 Master 本身發生了重啟(導致 runid 改變),或者發生了故障轉移(Failover),新的 Master 會有新的 runid,即使它們的 offset 看起來一致,Slave 也會被判斷為需要進行全量同步。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88143.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88143.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88143.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 安全優化指南:保護你的數據庫免受攻擊

在當今高度互聯的數字世界中,數據是企業的核心資產,而數據庫則是存儲這些資產的堡壘。作為最流行的開源關系型數據庫之一,MySQL 被廣泛應用于各種業務場景。然而,其普及性也使其成為網絡攻擊者青睞的目標。一旦數據庫被攻破,可能導致敏感數據泄露、業務中斷、聲譽受損,甚…

界面控件Telerik UI for WinForms 2025 Q2亮點 - 支持.NET 10 Preview

隨著2025年第二季度新版本的發布&#xff0c;Progress Telerik通過流行的集成IDE的AI編碼助手&#xff0c;基于提示的樣式和基于GenAI的報表見解重新定義了開發人員的工作效率&#xff01; Telerik和Kendo UI在構建尖端應用程序時繼續推動開發人員工作效率提升&#xff0c;202…

DVWA靶場通關筆記-驗證碼繞過reCAPTCHA(Medium級別)

目錄 一、reCAPTCHA 二、代碼審計&#xff08;Medium級別&#xff09; 1、滲透準備 &#xff08;1&#xff09;配置security為Medium級別。 &#xff08;2&#xff09;配置RECAPTCHA參數 &#xff08;3&#xff09;再次打開靶場 2、源碼分析 &#xff08;1&#xff09;…

人工智能安全基礎復習用:對抗樣本檢測與防御

一、對抗樣本&#xff08;Adversarial Examples&#xff09;定義&#xff1a;對輸入樣本添加人眼無法察覺的細微干擾&#xff0c;導致模型以高置信度輸出錯誤結果。對抗樣本的分布通常偏離自然數據分布&#xff0c;與正常樣本在模型中間層/輸出層的分布存在差異。核心目標&…

[數學基礎] 矩陣的秩及其應用

深入淺出&#xff1a;矩陣的秩及其應用 文章目錄深入淺出&#xff1a;矩陣的秩及其應用一、數學定義二、核心作用三、計算方法與步驟方法1&#xff1a;高斯消元法&#xff08;最常用&#xff09;方法2&#xff1a;奇異值分解&#xff08;SVD&#xff09;方法3&#xff1a;行列式…

LKH-3算法求解TSP問題基本原理與應用

通俗理解LKH-3算法 LKH-3&#xff08;Lin-Kernighan-Helsgaun&#xff09;是求解**旅行商問題&#xff08;TSP&#xff09;**的最強啟發式算法之一&#xff0c;由丹麥計算機科學家Keld Helsgaun在LKH-2基礎上改進而來。它的核心思想是&#xff1a;通過智能的“局部破壞與修復”…

游戲開發學習記錄

初始化只是第一次實例化的時候調用&#xff0c;show和unshow是打開界面和關閉界面的時候&#xff0c;會多次調用 在一個腳本里面show是每一次打開界面的時候需要做的事情&#xff0c;而Init是初始化。UIMgr里面的數據結構&#xff1a;為什么我要先從數據結構入手呢&#xff1f;…

一級緩存與二級緩存深度剖析:作用域、配置與同步方案全解析

引言 在分布式系統與高并發場景下&#xff0c;緩存機制已成為提升系統性能的關鍵技術。本文從作用域、失效機制、配置實踐到同步方案&#xff0c;系統化解析一級緩存與二級緩存的核心差異與工程實踐。 一、一級緩存&#xff1a;會話級數據加速器 1.1 作用域與生命周期 作用域&a…

OneCode MQTT插件開發實戰:基于Paho.Client的物聯網通信解決方案

引言 在物聯網應用開發中&#xff0c;MQTT協議因其輕量、低帶寬占用的特性被廣泛采用。OneCode平臺提供的xui.MQTT插件基于Eclipse Paho.Client實現了完整的MQTT通信能力&#xff0c;本文將從插件用途、核心實現、開發要點和功能擴展四個維度&#xff0c;詳解如何基于該插件構建…

1.1_5_1 計算機網絡的性能指標(上)

在這個小節中我們要學習計算機網絡的性能指標&#xff0c;我們在考研當中主要掌握這樣的七個性能指標&#xff0c;分別是速率、帶寬、吞吐量、時延、時延帶寬積、往返時延和信道利用率。我會把相關性比較緊密的性能指標放在一起講解。在這個視頻中&#xff0c;我們先來學習前三…

Python 性能優化指南:深入剖析代碼分析與優化工具

Python 性能優化指南:深入剖析代碼分析與優化工具 在 Python 的廣泛應用場景中,性能優化既是挑戰,也是機遇。無論是構建 Web 應用還是處理數據分析,理解代碼性能瓶頸并有效優化至關重要。本文將探討 Python 代碼性能分析的核心方法,并逐步解析關鍵工具的使用技巧,帶您從…

力扣打卡第二十一天 中后遍歷+中前遍歷 構造二叉樹

106. 從中序與后序遍歷序列構造二叉樹 給定兩個整數數組 inorder 和 postorder &#xff0c;其中 inorder 是二叉樹的中序遍歷&#xff0c; postorder 是同一棵樹的后序遍歷&#xff0c;請你構造并返回這顆 二叉樹 。 示例 1: 輸入&#xff1a;inorder [9,3,15,20,7], postor…

Notepad++正則表達全解

摘要:Notepad正則表達式符號大全包含11類常用語法&#xff1a;基礎符號&#xff08;.^$?等&#xff09;、預定義字符類&#xff08;\d\w\s等&#xff09;、錨點&#xff08;\b\B&#xff09;、量詞&#xff08;{n,m}&#xff09;、分組引用&#xff08;()$1&#xff09;、字符…

前后端分離(java) 和 Nginx在服務器上的完整部署方案(redis、minio)

一、準備工作 服務器環境要求 銀河麒麟 V10 操作系統 開放端口&#xff1a;MinIO (9000、9001)、 Redis (6379)、應用服務 jar包(18888)、前端服務(8080) 系統用戶&#xff1a;具有 sudo 權限的用戶 操作&#xff1a;需要先有必備的工具前端的vsCode,webStrom、后臺的idea&…

貪心算法:簡單而高效的求解策略C++

貪心算法詳解及C實現 1. 什么是貪心算法 貪心算法&#xff08;Greedy Algorithm&#xff09;是一種在每一步選擇中都采取在當前狀態下最好或最優&#xff08;即最有利&#xff09;的選擇&#xff0c;從而希望導致結果是全局最好或最優的算法策略。 貪心算法與動態規劃不同在于它…

IDEA 中使用 <jsp:useBean>動作指令時,class屬性引用無效

問題&#xff1a;在 IDEA 中創建 Java Web項目&#xff0c;在src/model包下存在一個Student類該類中包含&#xff1a;全參構造器、私有屬性的get/set方法。然后在 jsp 頁面中使用 <jsp:useBean>創建Student類的對象&#xff1a;訪問頁面時報錯&#xff1a;原因&#xff1…

【網絡】Linux 內核優化實戰 - net.core.flow_limit_table_len

目錄參數作用查看與修改調優建議相關警告net.core.flow_limit_table_len 是 Linux 內核中的一個網絡參數&#xff0c;用于控制**流限制表&#xff08;Flow Limit Table&#xff09;**的大小。這個表主要用于限制網絡流量中單個"流"&#xff08;通常指來自同一源IP、端…

前端開發常見問題技術文章大綱

前端開發常見問題技術文章大綱 常見性能優化問題 頁面加載速度慢的原因及解決方案渲染阻塞資源的優化方法內存泄漏的檢測與修復 跨瀏覽器兼容性問題 不同瀏覽器對CSS和JavaScript的支持差異Polyfill和Shim的使用場景如何利用工具檢測兼容性問題 響應式設計挑戰 媒體查詢的最佳實…

Redis常見性能問題和解決方案有哪些?

Redis 作為高性能的內存數據庫&#xff0c;在實際使用中可能會遇到性能問題。以下是常見的性能問題及其解決方案&#xff0c;用中文總結如下&#xff1a; 1. 高延遲問題 問題描述&#xff1a;客戶端請求響應時間過長&#xff0c;可能由于網絡、命令復雜度或服務器負載導致。 解…

閃測儀應用案例丨手機中框如何突破「尺寸檢測」瓶頸?

越來越多的手機中框&#xff0c;正改為更復雜的鏤空設計&#xff0c;這種設計不僅保持了手機中框的結構強度&#xff0c;還進一步減輕了機身重量&#xff0c;同時提升了散熱性能。這讓手機中框的自動化生產增加了很多難點&#xff0c;其中的尺寸檢測就遇到了許多瓶頸。? 尺寸精…