0x01、Redis 主从复制的实现原理是什么?
Redis 主从复制概述
Redis 的主从复制是一种机制,允许一个主节点(主实例)将数据复制到一个或多个从节点(从实例)。通过这一机制,从节点可以获取主节点的数据并与之保持同步。
复制流程
- 开始同步:从节点通过向主节点发送
PSYNC命令请求同步。 - 全量复制:如果是第一次连接或之前的连接失效,从节点会请求进行全量复制,主节点会将当前数据快照(RDB 文件)发送给从节点。
- 增量复制:全量复制完成后,主从之间保持一个长连接,主节点会通过此连接将后续的写操作传递给从节点,从而确保数据一致性。
Redis 主从架构
下图展示了一个 Redis 主从架构:
在这一架构中,仅主节点可以进行写入操作,而其他从节点通过复制来保持数据的一致性。这种机制不仅保障了数据一致性,还通过将读请求分散到多个节点,提高了系统的吞吐量和可用性。
主从复制原理详解
Redis 的主从复制主要有两种同步方式:全量同步和增量同步。
1. 全量同步
下图描述了全量同步的流程:
- 流程:
- 从节点发送命令
psync ? -1触发全量同步请求。 - 主节点接收到请求后,发现从节点传递的 run ID 为“?”(表示未知),因此判断为需要进行全量同步,并返回其自身的 run ID 以及当前的复制进度。
- 主节点执行
bgsave生成 RDB 文件,同时将新接收到的写入命令存储在一个名为 replication buffer 的临时缓冲区中。 - RDB 文件生成完成后,主节点将其发送给从节点,从节点在接收后清空旧数据并加载新的 RDB 数据。
- 加载完成后,主节点将 replication buffer 中缓存的写入命令发送给从节点,以确保数据的一致性。
- 从节点发送命令
2. 增量同步
- 背景:在网络不稳定的情况下,主节点的一部分写操作可能未能成功传递给从节点。全量同步的数据量较大且耗时,因此 Redis 引入了增量同步(从 Redis 2.8 版本开始)。
- 使用
repl_backlog_buffer:repl_backlog_buffer是一个环形缓冲区,默认大小为 1 MB,用于存储主节点最近的写入命令。- 当从节点重新连接时,如果它的 run ID 与主节点一致,并且 offset 值在
repl_backlog_buffer中,主节点将从缓冲区中查找相应的命令并发送给从节点,以实现增量同步。
replication buffer 与 repl_backlog_buffer 的区别
-
replication buffer:
- 每个从节点都有一个独立的
replication buffer,用于实时传输写命令。其大小是动态调整的。可以通过配置client-output-buffer-limit来控制其大小,以防止缓冲区过大导致的连接问题。
- 每个从节点都有一个独立的
-
repl_backlog_buffer:
repl_backlog_buffer在主节点上是唯一的,主要用于存储最近的写命令,以便从节点在重新连接时能够进行部分重同步。该缓冲区的大小是固定的,主要用于支持增量同步。
通过以上设计,Redis 能够实现高可用性和高性能的数据管理。
当然可以!下面是你要的 Markdown 格式:题目和选项部分在前,所有答案和解析统一放在最后,方便做题和核对。
Redis 主从复制选择题(共 5 题)
1. 在 Redis 主从复制中,如果从节点是第一次连接主节点,或者之前的连接失效,从节点会如何进行同步?
A. 从节点会请求全量复制,主节点将当前数据快照(RDB 文件)发送给从节点
B. 从节点会请求全量复制,主节点将当前内存快照以流的形式发送
C. 从节点会请求主节点的 AOF 日志文件
D. 从节点请求主节点的 replication buffer 中的数据
2. Redis 主从复制中,以下哪个缓冲区是用于存储最近的写命令,并用于从节点重新连接进行部分重同步?
A. replication buffer
B. client-output-buffer-limit
C. repl_backlog_buffer
D. psync命令缓冲区
3. 如何避免 Redis 主从复制中频繁进行全量同步?
A. 增强主节点内存大小
B. 增加从节点数量
C. 增加 repl_backlog_buffer 和 client-output-buffer-limit 的大小
D. 增加主节点 CPU 数量
4. 对于从节点延迟较大的情况,如何控制从节点使用的内存缓冲?
A. 调整主节点的 RDB 文件生成频率
B. 限制从节点的 client-output-buffer-limit
C. 调整 client-output-buffer-limit 控制主节点的 replication buffer 大小
D. 增加网络带宽
5. 当增量同步失败后,为什么 Redis 会选择进行全量同步?
A. repl_backlog_buffer 中的数据已经被覆盖
B. repl_backlog_buffer 中的数据被误删
C. 主节点丢失了队列内的 runid
D. 从节点数据损坏
✅ 答案与解析
1. 正确答案:A
解析:当从节点首次连接或失联重新连接时,主节点会向其发送全量数据快照(RDB 文件)进行同步。
2. 正确答案:C
解析:repl_backlog_buffer 是用于部分同步的缓冲区,记录最近的写命令。
3. 正确答案:C
解析:增加相关 buffer 的大小可以有效避免 offset 被覆盖,从而减少全量同步频率。
4. 正确答案:B
解析:client-output-buffer-limit 控制从节点在主节点上的输出缓存,限制可避免资源过度消耗。
5. 正确答案:A
解析:如果从节点 offset 太旧,而 repl_backlog_buffer 已被覆盖,则只能重新进行全量同步。
相关文章:
0x01、Redis 主从复制的实现原理是什么?
Redis 主从复制概述 Redis 的主从复制是一种机制,允许一个主节点(主实例)将数据复制到一个或多个从节点(从实例)。通过这一机制,从节点可以获取主节点的数据并与之保持同步。 复制流程 开始同步…...
noscript 标签是干什么的
vue public目录下的 index.html 会有 <noscript> 标签不知道是干吗的。 其实 noscript 标签在不支持或是禁用JavaScript 的浏览器中显示替代的内容。这个元素可以包含任何 HTML 元素。这个标签的用法也非常简单: <noscript><strong>Were sorry …...
[创业之路-366]:投资尽职调查 - 尽调核心逻辑与核心影响因素:价值、估值、退出、风险、策略
目录 一、VC投资的本质是冒着不确定性风险进行买卖、生意,为了赚取高额回报 1、VC投资的核心本质 2、VC投资的运作机制 3、VC投资的风险与挑战 4、VC投资的底层逻辑 5、总结:VC投资的本质再定义 二、尽调核心逻辑 1、尽调的含义 2、尽调的逻辑方…...
MOP数据库中的EXPLAIN用法
EXPLAIN 是 SQL 中的一个非常有用的工具,主要用于分析查询语句的执行计划。执行计划能展示数据库在执行查询时的具体操作步骤,像表的读取顺序、使用的索引情况、数据的访问方式等,这有助于我们对查询性能进行优化。 语法 不同的数据库系统&…...
Hyprnote开源程序是一款记录和转录您会议的 AI 记事本。 本地优先且可扩展 。
一、软件介绍 文末提供源码下载学习 Hyprnote开源程序是一款记录和转录您会议的 AI 记事本。 从您的原始会议记录中生成强大的摘要,本地优先且可扩展 。使用开源模型 (Whisper & Llama) 离线工作,高度可扩展 ,由插…...
MSCKF及可观性总结
可观性 参考链接 真实VIO系统不能观的维度是4(位置和yaw角),由于EKF的转移和观测Jacobian矩阵的线性化点不同、不可观方向噪声的存在,实际MSCKF不能观的维度变成了3,绕重力轴的旋转(yaw角)被错…...
上篇:新能源轻卡城配物流经济/动力模式量化定义(理论篇)——数学暴力破解工程困局
副标题:用微分方程撕开模式切换本质,用传感器数据重构载重真相 引言:为什么轻卡模式定义比乘用车难10倍? 行业现状痛点: 中国新能源轻卡日均载重波动高达300%(空载0kg→满载4.5吨)某头部车企实…...
Ubuntu22环境下,Docker部署阿里FunASR的gpu版本
番外: 随着deepseek的爆火,人工智能相关的开发变得异常火爆,相关的大模型开发很常见的agent智能体需要ASR语音识别的功能,阿里开源的FunASR几乎是把一个商业的项目放给我们使用了。那么我们项目中的生产环境怎么部署gpu版本的语音识别服务呢?经过跟deepseek的一上午的极限…...
Python 实现最小插件框架
文章目录 Python 实现最小插件框架1. 基础实现项目结构plugin_base.py - 插件基类plugins/hello.py - 示例插件1plugins/goodbye.py - 示例插件2main.py - 主程序 2. 更高级的特性扩展2.1 插件配置支持2.2 插件依赖管理2.3 插件热加载 3. 使用 setuptools 的入口点发现插件3.1 …...
内网邮箱服务器搭建-详解
目录 一、背景 二、搭建邮箱需要具备的基础知识 1、smtp(Simple Mail Transfer Protocol) SMTP工作原理 SMTP 命令 SMTP 协议端口 2、pop3(Post Office Protocol) POP3特点 POP3工作原理 3、imap4(Internet M…...
21 天 Python 计划:使用SQLAlchemy 中的ORM查询
文章目录 准备工作图书表 books分类表 categoriesORM 对象定义 一、根据主键获取记录二、AND 查询三、 常用方法四、OR 查询五、 5. AND 和 OR 并存的查询六、巧用列表或者字典的解包给查询方法传参七、其它常用运算符八、查询指定列九、内连接、外连接9.1 内连接9.2 外连接9.3…...
使用 LLaMA-Factory 微调 llama3 模型(二)
使用 LLaMA-Factory 微调 llama3 模型 1. LLaMA-Factory模型介绍 https://github.com/hiyouga/LLaMA-FactoryLLaMA-Factory 是一个用于大型语言模型(LLM)微调的工具,它旨在简化大型语言模型的微调过程, 使得用户可以快速地对模型…...
并发编程--条件量与死锁及其解决方案
并发编程–条件量与死锁及其解决方案 文章目录 并发编程--条件量与死锁及其解决方案1.条件量1.1条件量基本概念1.2条件量的使用 2. 死锁 1.条件量 1.1条件量基本概念 在许多场合中,程序的执行通常需要满足一定的条件,条件不成熟的时候,任务…...
JAVA SE 自我总结
目录 1. 字面常量 2. 数据类型 3. 变量 4. 类型转换 5. 实参和形参的关系 6. 数组 6.1 数组的概念 6.2 动态初始化 6.3 静态初始化 7. 数据区 编辑 8. 数组的拷贝 8.1 赋值拷贝 8.2 方法拷贝 9. 代码块 10. 内部类 10.1 实例内部类 10.2 静态内部类 10.3 …...
RAG创建向量数据库:docsearch = FAISS.from_texts(documents, embeddings)
RAG创建向量数据库:docsearch = FAISS.from_texts(documents, embeddings) 代码解释 docsearch = FAISS.from_texts(documents, embeddings) 这行代码主要作用是基于给定的文本集合创建一个向量数据库(这里使用 FAISS 作为向量数据库工具 )。具体说明如下: FAISS :FAISS …...
虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?
虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解? code review! 文章目录 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?理解这句话的关键点1.类(…...
鸢尾花分类的6种机器学习方法综合分析与实现
鸢尾花分类的6种机器学习方法综合分析与实现 首先我们来看一下对应的实验结果。 数据准备与环境配置 在开始机器学习项目前,首先需要准备编程环境和加载数据。以下代码导入必要的库并加载鸢尾花数据集: import numpy as np import pandas as pd impo…...
vite,Vue3,ts项目关于axios配置
一、安装依赖包 npm install axios -S npm install qs -S npm install js-cookie 文件目录 二、配置线上、本地环境 与src文件同级,分别创建本地环境文件 .env.development 和线上环境文件 .env.production # 本地环境 ENV = development # 本地环境接口地址 VITE_API_URL =…...
mysql:重置表自增字段序号
情况一:清空表数据后重置自增 ID 如果你希望清空表中的所有数据,并将自增 ID 重置为初始值(通常为 1) 1、truncate truncate table tb_dict; 2、delete 配合 alter 语句 delete from tb_dict; alter table tb_dict AUTO_INCR…...
STM32 模块化开发指南 · 第 4 篇 用状态机管理 BLE 应用逻辑:分层解耦的实践方式
本文是《STM32 模块化开发实战指南》第 4 篇,聚焦于 BLE 模块中的状态管理问题。我们将介绍如何通过有限状态机(Finite State Machine, FSM)架构,实现 BLE 广播、扫描、连接等行为的解耦与可控,并配合事件队列驱动完成主从共存、低功耗友好、状态清晰的 BLE 应用。 一、为…...
HTML — 浮动
浮动 HTML浮动(Float)是一种CSS布局技术,通过float: left或float: right使元素脱离常规文档流并向左/右对齐,常用于图文混排或横向排列内容。浮动元素会紧贴父容器或相邻浮动元素的边缘,但脱离文档流后可能导致父容器高…...
IP节点详解及国内IP节点获取指南
获取国内IP节点通常涉及网络技术或数据资源的使用,IP地址作为网络设备的唯一标识,对于网络连接和通信至关重要。详细介绍几种修改网络IP地址的常用方法,无论是对于家庭用户还是企业用户,希望能找到适合自己的解决方案。以下是方法…...
AD9253 LVDS 高速ADC驱动开发
1、查阅AD9253器件手册 2、查阅Xilinx xapp524手册 3、该款ADC工作在125Msps下,14bit - 2Lane - 1frame 模式。 对应:data clock时钟为500M DDR mode。data line rate:1Gbps。frame clock:1/4 data clock 具体内容:…...
pycharm2024.3.5版本配置conda踩坑
配置解释器是conda时,死活选不到自己的环境 看了很多,都是说要选scripts下的conda.exe 都没用 主要坑在于这是新版的pycharm 是配置condabin 下的 conda.bat 参考:PyCharm配置PyTorch环境(完美解决找不到Conda可执行文件python.exe问题) …...
【异常处理】Clion IDE中cmake时头文件找不到 头文件飘红
如图所示是我的clion项目目录 我自定义的data_structure.h和func_declaration.h在unit_test.c中无法检索到 cmakelists.txt配置文件如下所示: cmake_minimum_required(VERSION 3.30) project(noc C) #设置头文件的目录 include_directories(${CMAKE_SOURCE_DIR}/…...
14 - VDMA彩条显示实验
文章目录 1 实验任务2 系统框图3 硬件设计4 软件设计 1 实验任务 本实验任务是PS端写彩条数据至DDR3内存中,然后通过PL端的VDMA IP核将彩条数据通过HDMI接口输出显示。 2 系统框图 本实验是用HDMI接口固定输出1080P的彩条图,所以: rgb2lc…...
每天学一个 Linux 命令(13):touch
Linux 文件管理命令:touch touch 是 Linux 中一个简单但高频使用的命令,主要用于创建空文件或修改文件的时间戳(访问时间、修改时间)。它是文件管理和脚本操作的实用工具。 1. 命令作用 创建空文件:快速生成一个或多个空白文件。更新时间戳:修改文件的访问时间(Access …...
PromptUp 网站介绍:AI助力,轻松创作
1. 网站定位与核心功能 promptup.net 可能是一个面向 创作者、设计师、营销人员及艺术爱好者 的AI辅助创作平台,主打 零门槛、智能化的内容生成与优化。其核心功能可能包括: AI艺术创作:通过输入关键词、选择主题或拖放模板,快速生成风格多样的数字艺术作品(如插画、海报…...
高级java每日一道面试题-2025年3月26日-微服务篇[Nacos篇]-在Spring Cloud项目中如何集成Nacos?
如果有遗漏,评论区告诉我进行补充 面试官: 在Spring Cloud项目中如何集成Nacos? 我回答: 在Spring Cloud项目中集成Nacos,可以充分利用Nacos作为服务注册与发现中心以及配置管理中心的功能。以下是详细的步骤和说明,帮助你完成这一集成过程…...
AI 大语言模型 (LLM) 平台的整体概览与未来发展
📋 分析报告:AI 大语言模型 (LLM) 平台的整体概览与未来发展 自动生成的结构化分析报告 💻 整体概述:AI LLM 平台的市场现状与发展动力 随着人工智能技术的飞速发展,大语言模型(Large Language Models, L…...
