【面試之Redis篇】主從復制原理

從面試的角度來解釋 Redis 主從復制原理,按照“總-分-總”的結構,清晰地闡述其核心概念、工作流程和關鍵要點,這能體現出你不僅知道是什么,還理解為什么以及如何應對相關問題。


總覽:一句話定義

面試官您好,Redis 的主從復制是指:由一個 Redis 服務器(主節點 Master)將其數據自動同步到一個或多個 Redis 服務器(從節點 Slave)的過程。它的核心目的是實現數據的冗余備份、實現讀寫分離以提升讀性能、并構成高可用和故障恢復的基礎。


分步詳解:核心工作原理(重點闡述)

主從復制的過程主要可以分為三個階段:建立連接、數據同步、命令傳播。其中數據同步階段是重中之重。

第一階段:建立連接 (Handshake)
  1. 配置與連接:從節點通過執行 replicaof <masterip> <masterport> 命令(舊版本為 slaveof)或修改配置文件,保存主節點的地址和端口。
  2. 建立 Socket 連接:從節點會創建一個專門的 Socket 連接,用于與主節點進行通信。如果連接成功,從節點會為這個 Socket 關聯一個專門的文件事件處理器,負責處理后續的復制工作。
  3. 發送 PING 命令:連接建立后,從節點首先發送一個 PING 命令。目的是:
    • 檢查 Socket 連接是否可用。
    • 檢查主節點是否能正常處理請求(如果主節點返回錯誤或超時無響應,從節點會斷開并重連)。
  4. 身份驗證:如果主節點配置了 requirepass,從節點需要發送 AUTH 命令并提供密碼進行驗證。
  5. 發送端口信息:身份驗證通過后,從節點會向主節點發送自己監聽的端口號(REPLCONF listening-port <port>),主節點會保存這個信息。

至此,通信鏈路已準備好,復制流程進入最關鍵的數據同步階段。

第二階段:數據同步 (Synchronization)

這是復制過程的核心,目的是讓從節點的數據集狀態與主節點達成一致。根據從節點是否是第一次同步,會分為全量復制部分復制(增量復制)

1. 全量復制 (Full Resynchronization) - 用于首次同步或偏移量不匹配時

  • PSYNC 命令:從節點使用 PSYNC 命令向主節點發起同步請求。如果是第一次連接,從節點會發送 PSYNC ? -1
  • 主節點執行 BGSAVE:主節點收到全量同步請求后,會在后臺啟動一個 bgsave 子進程來生成當前數據的 RDB 快照文件。
  • 復制緩沖區bgsave 期間,主節點依然會處理新的寫命令。這些寫命令會被緩存在內存中的一個叫做復制緩沖區 (Replication Buffer) 的區域里。
  • 發送 RDB 文件bgsave 完成后,主節點將 RDB 文件通過之前建立的連接發送給從節點。
  • 從節點加載 RDB:從節點接收到 RDB 文件后,會清空自身舊數據,然后將其加載到內存中,使自身數據狀態達到主節點執行 bgsave 時的狀態。
  • 發送緩沖區的寫命令:主節點將復制緩沖區中記錄的、在 bgsave 期間產生的所有寫命令發送給從節點。
  • 從節點執行寫命令:從節點執行這些寫命令,最終使其數據庫狀態與主節點完全同步。

面試點睛:這里常問 “主節點在生成 RDB 期間的新寫命令是如何處理的?” 一定要答出復制緩沖區的概念。

2. 部分復制 (Partial Resynchronization) - 用于斷線重連后的增量同步

  • 復制偏移量 (Replication Offset):主從節點都會維護一個復制偏移量。主節點每次向從節點傳播 N 個字節的數據,自己的偏移量就增加 N。從節點每次收到 N 個字節,偏移量也增加 N。
  • 復制積壓緩沖區 (Replication Backlog):主節點內部維護了一個固定長度的、FIFO 的隊列(默認 1MB)。主節點在傳播命令時,不僅發給從節點,還會寫一份到復制積壓緩沖區
  • 斷線重連:當從節點重新連上主節點時,會通過 PSYNC 命令將自己的偏移量 offset 發送給主節點。
  • 偏移量比對:主節點檢查 offset
    • 如果 offset+1 之后的數據仍然存在于復制積壓緩沖區中,則主節點回復 +CONTINUE,表示可以進行部分復制。
    • 隨后主節點將復制積壓緩沖區中從 offset+1 開始的所有數據發送給從節點。
    • 從節點執行這些命令,即可將數據同步至主節點的最新狀態。

面試點睛:這部分是高頻考點。一定要解釋清楚 PSYNCoffsetbacklog 這三個核心概念是如何協同工作來實現高效的部分復制的。

第三階段:命令傳播 (Command Propagation)

當同步完成后,主從節點的數據達到一致狀態。之后,主節點進入命令傳播階段。

  • 每當主節點接收到新的寫命令時,除了自己執行,還會異步地將這個命令發送給所有從節點。
  • 從節點執行相同的命令,從而最終保持數據的一致性。

總結與升華

在回答的最后,可以進行總結并引申出相關話題,展示知識的廣度:

  • 最終一致性:Redis 主從復制是異步的,這意味著主從數據存在短暫延遲,是最終一致性模型。延遲取決于網絡、負載等因素。
  • 核心面試點
    1. 全量復制 vs 部分復制:理解它們的觸發條件和過程,尤其是 PSYNC 機制。
    2. 核心組件復制偏移量 (offset)復制積壓緩沖區 (backlog)復制緩沖區 (buffer) 的作用和區別。
    3. 異步復制:理解其優勢和可能的數據丟失風險(主節點宕機且未同步到從節點的數據會丟失)。
  • 引申話題
    • 讀寫分離:基于主從復制,可以將寫操作交給主節點,讀操作分散到從節點,提升系統吞吐量。
    • 高可用基石:主從復制是 Redis Sentinel(哨兵)和 Redis Cluster(集群)實現故障自動轉移(Failover)的基礎。哨兵系統正是通過監控主從節點,并在主節點故障時自動將一個從節點提升為主節點來實現高可用。

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

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

相關文章

數據庫開啟ssl

數據庫&#xff1a;阿里云rds 系統&#xff1a;centos 需要修改的&#xff1a;nacos連接項目連接本地navicat連接 重點&#xff1a;為了兼容本地和服務器&#xff0c;ssl證書路徑由原來的絕對路徑換成環境變量參數&#xff0c;所以有步驟4 文章目錄步驟1 阿里云步驟2 navicat…

Redis 事件驅動與多路復用源碼剖析

Redis 事件驅動與多路復用源碼剖析1. 前言 Redis 是 單線程 I/O 多路復用 的典型代表。 它并不是多線程處理請求&#xff0c;而是依賴 事件驅動&#xff08;event-driven&#xff09;模型&#xff0c;在一個線程內高效管理海量連接。 核心組件&#xff1a; ae.c&#xff1a;事…

VR煤礦實訓系統相較于傳統煤礦培訓方式的獨特優勢?-廣州華銳互動

高度逼真&#xff0c;沉浸體驗?VR煤礦實訓系統運用先進的3D建模、動態仿真技術&#xff0c;對煤礦井下的復雜環境進行1:1還原。從幽深的巷道、運轉的采煤設備&#xff0c;到潮濕的空氣、昏暗的燈光&#xff0c;甚至細微的煤塵顆粒&#xff0c;都能逼真呈現。使用者戴上VR設備后…

javaweb XML DOM4J

XMLXML作用就是配置文件&#xff0c;properties使用不了較復雜的需求&#xff0c;xml應運而生配置文件對比 xml更方便tips1:新建resources目錄&#xff0c;并將src中的jdbc.properties移到resourcs中&#xff0c;并且右鍵標記為源代碼根目錄&#xff0c;這樣運行src時就會和pro…

多模態視頻理解領域 Benchmark 與 Leaderboard 整理

多模態視頻理解是當前人工智能領域的研究熱點&#xff0c;其核心目標是讓模型像人類一樣&#xff0c;綜合視頻中的視覺、聽覺&#xff08;部分場景&#xff09;及文本信息&#xff0c;實現對視頻內容的深度感知、理解與推理。為客觀評估模型性能&#xff0c;行業內涌現了眾多權…

18j621-3通風天窗圖集pdf(免費高清版)

18j621-3通風天窗已經替代05j621-3通風天窗圖集成為目前比較通用的建筑屋頂通風選型重要參考標準&#xff0c;18j621-3圖集是對前圖集的優化和革新&#xff0c;在18j621-3圖集中新增了TC8圓拱型電動采光天窗&#xff0c;豐富了屋面通風排煙設備的選型。在18j621-3天窗圖集中&am…

LawGPT:基于中文法律知識的大模型

本文轉載自&#xff1a;https://www.hello123.com/lawgpt ** 一、?? LawGPT&#xff1a;中文法律界的 “AI 法助”&#xff0c;啃透了 15 萬份判決書&#xff01; LawGPT 是一系列專攻中文法律知識的開源大模型&#xff0c;在通用中文基座&#xff08;如 ChatGLM&#xff0…

用 go-commons 快速寫一個監控 CPU/內存的 Exporter

歡迎加入開源項目&#xff0c;提你的 mr Go Commons&#xff1a;Golang 開發者的常用工具集&#xff0c;一站式解決常見需求 在 Go 語言的開發過程中&#xff0c;你是不是經常遇到這樣的情況&#xff1a; 想要做點小功能&#xff0c;卻得從零寫起&#xff0c;或者到處找三方…

KingbaseES客戶端工具Ksql使用全指南:從安裝到高級操作

引言 在國產數據庫蓬勃發展的今天&#xff0c;KingbaseES憑借其自主可控、高性能、高可用的特性&#xff0c;已成為政務、金融、能源等關鍵領域的首選數據庫。而作為其配套的命令行工具&#xff0c;Ksql更是DBA和開發人員的“瑞士軍刀”——它不僅能高效執行SQL查詢&#xff0c…

【LeetCode - 每日1題】可以輸入的最大單詞數

?? 個人主頁:(時光煮雨) ?? 高質量專欄:vulnhub靶機滲透測試 ?? 希望得到您的訂閱和支持~ ?? 創作高質量博文(平均質量分95+),分享更多關于網絡安全、Python領域的優質內容!(希望得到您的關注~) ??目錄?? 難度 ?? 題目回顧 ?解題思路 ??概述 ??核心…

3227. 字符串元音游戲

3227. 字符串元音游戲 題目鏈接&#xff1a;3227. 字符串元音游戲 代碼如下&#xff1a; class Solution { public:bool doesAliceWin(string s) {return ranges::any_of(s, [](char c) {return c a || c e || c i || c o || c u;});} };

微信小程序坐標位置使用整理(四)map組件

一、地圖上標點&#xff0c;marker 1.wxml <map id"map" scale"9" class"map"markers"{{markers}}" longitude"{{longitude}}" latitude"{{latitude}}" show-location"{{true}}"><cover-vie…

Parlant框架深度技術解析:革命性AI代理行為建模引擎

引言 在人工智能快速發展的今天&#xff0c;AI代理&#xff08;Agent&#xff09;技術已經成為連接人工智能與實際應用場景的重要橋梁。然而&#xff0c;傳統的AI代理開發面臨著諸多挑戰&#xff1a;提示詞工程的復雜性、行為不可預測性、工具調用的不確定性等問題嚴重制約了AI…

AI重構車載測試:從人工到智能的跨越

目錄 一、AI 在車載測試中的核心價值 二、AI 在車載測試的具體應用場景 (一)自動駕駛測試:AI 解決 “場景覆蓋” 與 “決策可靠性” 難題 (二)車機系統測試:AI 優化 “交互體驗” 與 “功能穩定性” (三)車載硬件測試:AI 實現 “故障預測” 與 “精準校準” (四)功能…

從職責劃分看架構:MVC 的 Controller 與 MVVM 的 ViewModel 差異

深入淺出&#xff1a;前端MVC與MVVM架構模式&#xff0c;你真的懂了嗎&#xff1f;? 序言 各位前端的“程序猿”和“程序媛”們&#xff0c;大家好&#xff01;&#x1f44b; 在前端開發的江湖中&#xff0c;MVC和MVVM這兩個詞&#xff0c;就像武林秘籍一樣&#xff0c;常常被…

Vue-color:Vue.js 專業顏色選擇器組件庫 – 支持Vue2/3,TypeScript,暗色主題

簡介 Vue-color 是一個專為 Vue.js 設計的顏色選擇器組件庫&#xff0c;提供了多種風格的顏色選擇器組件。它支持 Vue 2.7 和 Vue 3&#xff0c;具有 TypeScript 支持、SSR 兼容性和暗色主題支持。 特性 多種顏色選擇器 – 提供 Chrome、Sketch、Photoshop 等多種風格Vue 2.…

ArcGIS定向影像(2)——非傳統影像輕量級解決方案

ArcGIS能讓用戶自己低成本的做出谷歌街景嗎&#xff1f;現在ArcGIS Pro 3.2 和 ArcGIS Enterprise 11.2 能夠讓用戶不使用任何插件和擴展的情況下完成街景數據集的構建&#xff0c;數據管理&#xff0c;發布服務和調用的完整解決方案。非常體系化&#xff0c;由底層數據驅動&am…

CKA05--service

Task 重新配置 spline-reticulator namespace 中現有的 front-end Deployment&#xff0c;以公開現有容器 nginx 的端口 80/tcp 創建一個名為 front-end-svc 的新 Service &#xff0c;以公開容器端口 80/tcp 配置新的 Service &#xff0c;以通過 NodePort 公開各個 Pod 解析&…

用 Go 采集服務器資源指標:從原理到實踐

在后端開發或運維工作中&#xff0c;采集服務器資源指標 是個繞不開的需求&#xff1a; 運維要看 CPU、內存、磁盤的使用情況監控系統要定期上報這些數據應用程序有時候也需要根據系統負載做限流、彈性伸縮 那么問題來了&#xff1a;用 Go 怎么優雅地采集這些指標呢&#xff…

安卓學習 之 上下文菜單的操作

先來認識一下上下文菜單是什么樣子的&#xff1f;如圖&#xff0c;當長按一個控件時彈出來的菜單叫做上下文菜單&#xff1a;圖中第一個和第二個就是一個上下文菜單&#xff0c;第二個菜單里面還有一層菜單&#xff0c;這個上下文菜單被綁定到注冊按鈕中&#xff0c;也就是長按…