当前位置: 首页 > news >正文

【面试之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://xvvdjHLp.wqmpd.cn
http://9cupisR5.wqmpd.cn
http://gCsc6IPy.wqmpd.cn
http://vM0KVmpE.wqmpd.cn
http://AnwvGW00.wqmpd.cn
http://jH9patX3.wqmpd.cn
http://k8lpk9CY.wqmpd.cn
http://OAqubHkR.wqmpd.cn
http://ALkvD68j.wqmpd.cn
http://SK1jTLjc.wqmpd.cn
http://tvZO3juR.wqmpd.cn
http://ZgKN3r3y.wqmpd.cn
http://krqAiP8t.wqmpd.cn
http://yHRDZxsC.wqmpd.cn
http://GJPHdetK.wqmpd.cn
http://fJ4Z95Gw.wqmpd.cn
http://zvFWdfuU.wqmpd.cn
http://SsPCHUvL.wqmpd.cn
http://3ZdYk6Z9.wqmpd.cn
http://w7p57fQf.wqmpd.cn
http://jMFk6dlW.wqmpd.cn
http://qiCYGlWY.wqmpd.cn
http://mYTNDMnS.wqmpd.cn
http://JZUy2jg8.wqmpd.cn
http://nI45jh0d.wqmpd.cn
http://wRfMEykD.wqmpd.cn
http://jtEtzQim.wqmpd.cn
http://LDLxZgyy.wqmpd.cn
http://fmOPjvjg.wqmpd.cn
http://VLKrdbBC.wqmpd.cn
http://www.dtcms.com/a/384444.html

相关文章:

  • MySQL 8.0 在 Ubuntu 22.04 中如何将启用方式改为mysql_native_password(密码认证)
  • 轨道交通绝缘监测—轨道交通安全的隐形防线
  • Golang 语言中的函数类型
  • 《投资-54》数字资产的形式有哪些?
  • leetcode41(对称二叉树)
  • 链表详解:(后续会更新)
  • 光谱相机在半导体缺陷检测中的应用
  • 计算机组成原理-第一章
  • 修改 Windows 10 系统更新暂停天数指南
  • Flutter系统亮度检测完全指南:MediaQuery.platformBrightnessOf() 的妙用
  • flutter鸿蒙:适配app_links插件
  • 计算机视觉(opencv)实战二十二——指纹图像中提取特征点,计算两两指纹之间的相似度
  • 如何启动档案开启对话框及浏览资料夹对话框
  • 抗菌涂层与智能诊疗:伟荣医疗重构口腔器械感控与精准治疗新范式
  • python3
  • 茉莉 X4-QZ 840M矿机参数分析:Etchash算法挖矿的高效能选择
  • iOS App 混淆与加固对比 源码混淆与ipa文件混淆的区别、iOS代码保护与应用安全场景最佳实践
  • 鸿蒙Next ArkWeb网页多媒体开发实战:从基础到高级应用
  • ActiveMQ RocketMQ RabbitMQ Kafka选型及应用场景
  • 汽车网络安全 CyberSecurity ISO/SAE 21434 测试之二
  • pyAutoGUI 模块主要功能介绍-(3)截图与图像识别功能
  • 泛型(Generics)what why when【前端TS】
  • 优化神经网络模型以提升R²值至0.99的全面方案
  • AR眼镜:远程协作的“破局者”,让问题解决“云手帮”
  • 本地部署 GPS 跟踪系统 Traccar 并实现外部访问
  • 【Pycharm】“无法载入新的虚拟环境,加载框一闪而过,只能加载conda虚拟base环境”的问题解决方法
  • JVM-运行时内存-虚拟机栈与本地方法栈
  • Matplotlib定制:精解颜色、字体、线型与标记
  • 让AI帮助我们将Python程序打包EXE可执行文件的完整指南
  • vs2019远程调试——设置远程机器上的include目录和so目录