Redis——主从复制原理

Redis的主从复制原理是其高可用性和分布式读取能力的重要基础。以下是Redis主从复制原理的详细解释:
一、主从复制的基本概念
Redis的主从复制是一种数据复制和备份的方式,它允许一个主节点(Master)将其所有的数据同步到一个或多个从节点(Slave)。主节点负责处理写操作,所有写入的数据都会同步到从节点;而从节点只处理读取操作,不能对数据进行写入。这种架构提高了系统的可用性、读取性能和数据安全性。
二、主从复制的过程
主从复制的过程可以分为三个阶段:同步阶段、增量复制阶段和持续复制阶段。
- 同步阶段:从节点与主节点建立连接后,会进行初始化同步。在这个阶段,主节点会将当前所有的数据发送给从节点,从节点接收并保存到本地。这个过程通常被称为全量复制。
- 增量复制阶段:在全量复制完成后,主节点会将接收到的写入操作发送给从节点,从节点将这些写入操作重新执行,以保持数据的一致性。这个阶段被称为增量复制。
- 持续复制阶段:从节点持续监听主节点的写入操作,并按照接收顺序执行,以保持与主节点数据的一致性。
三、数据同步的方式
主从节点之间的数据同步可以通过两种方式实现:全量复制和增量复制。
- 全量复制:主节点将所有数据发送给从节点,从节点接收并保存在本地。这个过程会生成一个RDB快照文件,主节点将这个文件发送给从节点,从节点加载这个文件以完成数据的同步。全量复制通常发生在从节点第一次启动或者与主节点连接中断后重新同步时。

- 增量复制:主节点仅发送写操作给从节点,从节点根据接收到的写操作进行数据更新。这个过程依赖于主节点的复制偏移量(Replication Offset)和复制积压缓冲区(Replication Backlog)。主节点会为每个从节点维护一个复制偏移量,用来记录该从节点已经同步的最新写操作的偏移位置。当从节点与主节点断开连接并重新连接时,主节点会根据偏移量从复制积压缓冲区中提取缺失的数据并发送给从节点。

四、断点续传机制
在Redis 2.8之后,引入了PSYNC命令来替代原来的SYNC命令,以支持断点续传。当从节点与主节点断开连接后重新连接时,如果主节点的复制积压缓冲区中仍然保存了从节点需要的数据,主节点会返回增量数据,完成断点续传。如果主节点的缓冲区中没有保存足够的数据,主节点会执行全量复制。
五、主从复制的优点和缺点
-
优点:
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现故障时,可以通过将从节点提升为主节点来恢复服务,实现高可用。
- 负载均衡:可以轻易地实现横向扩展,实现读写分离,一个主节点用于写,多个从节点用于分摊读的压力,从而实现高并发。
-
缺点:
- 写操作的延迟:由于从节点需要等待主节点的数据复制请求,因此会导致写操作的延迟。
- 数据一致性:主从复制是异步的,从节点的数据可能有一定的延迟,因此在故障发生时可能存在数据丢失的风险。
相关文章:
Redis——主从复制原理
Redis的主从复制原理是其高可用性和分布式读取能力的重要基础。以下是Redis主从复制原理的详细解释: 一、主从复制的基本概念 Redis的主从复制是一种数据复制和备份的方式,它允许一个主节点(Master)将其所有的数据同步到一个或多…...
MATLAB数学建模之画图汇总
MATLAB是一种强大的数学软件,广泛应用于工程计算、控制设计、信号处理等领域。在数学建模中,MATLAB的绘图功能可以帮助我们直观地展示数据和模型结果。 1. 二维数据曲线图 1.1 绘制二维曲线的基本函数 plot函数用于绘制二维平面上的线性坐标曲线图&am…...
Milvus attu - docker 使用 及 版本兼容
文章目录 版本查看attu 和 milvus 的兼容性Docker 加载attu docker 合并到 Milvus文件管理使用 docker compose 挂在 Milvus,登录 attu 出现报错: Error: Failed to connect to Milvus: Error: 1 CANCELLED: Call cancelled 于是检查兼容问题 版本查看 Milvus 版本发布: htt…...
okHttp的tcp连接池的复用
okhttp的连接池是tcp连接池吧,是两台机器之间的连接,ip:port连接,然后具体的接口再添加具体的url吗? 具体的 HTTP 请求(包括 URL、请求方法、头部等)则是在复用的 TCP 连接上进行传输的。 是的,…...
nginx 自启动失败:Failed to parse PID from file: Invalid argument
记一次nginx自启动配置的问题 我的配置如下: [Unit] DescriptionA high performance web server and a reverse proxy server Afternetwork.target[Service] Typeforking PIDFile/home/u24/nginx/pid/nginx.pid ExecStartPre/home/u24/nginx/sbin/nginx -t -q -g d…...
Wwise SoundBanks内存优化
1.更换音频格式为Vorbis 2.停用多余的音频,如Random Container的随机脚步声数量降为2个 3.背景音乐勾选“Stream”。这样就让音频从硬盘流送到Wwise,而不是保存在内存当中,也就节省了内存 4.设置最大发声数Max Voice Instances 5.设置音频…...
centos 常见问题处理
免密登录配置 # 在当前机器下 执行命令 生成 私钥和公钥 ~/.ssh 目录下 ssh-keygen -t rsa # 执行如下命令 把公钥 放到 对应机器上的 ~/.ssh/authorized_keys ssh-copy-id 172.17.68.220 # 如此 两台机器两两配置 centos ssh连接慢 vim /etc/ssh/sshd_config # UseD…...
简述Vue每个周期具体适合哪些场景?
Vue.js 的生命周期分为几个不同的阶段,每个阶段都对应着组件的创建、挂载、更新和销毁。以下是对 Vue 实例每个生命周期周期的具体场景描述: 创建前/后(beforeCreate / created) beforeCreate:在实例初始化之后&#x…...
Alibaba Druid(简称Druid)
目录 核心功能 数据源配置与管理: 高性能与可扩展性: 监控与SQL解析: 安全性: 应用场景 使用方式 配置示例 通过yaml方式配置 web.xml中配置 访问Druid的监控页面 监控页面展示 Alibaba Druid(简称Druid&am…...
linux protobuf的安装与使用
首先,下载protobuf: wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-cpp-3.21.11.zip 然后,解压: tar -xf protobuf-2.5.0.tar.gz 接着,安装protobuf cd protobuf-3.21.11…...
关于Chrome自动同步书签的解决办法
前言 并不一定适用所有用户, 目前我在网上搜集了一些资料,也做了一些尝试。 就我个人总结的经验来讲,分享大家以下几种办法: 1.书签同步插件 点击如下🔗: Chrome书签同步https://bm.famend.cn/ …...
基于深度学习的甲状腺结节影像自动化诊断系统(PyQt5界面+数据集+训练代码)
随着医学影像技术的发展,计算机辅助诊断在甲状腺结节的早期筛查中发挥着重要作用。甲状腺结节的良恶性鉴别对临床治疗具有重要意义,但传统的诊断方法依赖于医生的经验和影像学特征,存在一定的主观性和局限性。为了解决这一问题,本…...
docker常用操作命令
Docker 常用命令 列出所有容器 ID docker ps -aq停止所有容器 docker stop $(docker ps -aq)删除所有容器 docker rm $(docker ps -aq)删除所有镜像 docker rmi $(docker images -q)复制文件 docker cp mycontainer:/opt/file.txt /opt/local/ docker cp /opt/local/file…...
Android:生成Excel表格并保存到本地
提醒 本文实例是使用Kotlin进行开发演示的。 一、技术方案 org.apache.poi:poiorg.apache.poi:poi-ooxml 二、添加依赖 [versions]poi "5.2.3" log4j "2.24.2"[libraries]#https://mvnrepository.com/artifact/org.apache.poi/poi apache-poi { module…...
JVM-程序计数器与栈
目录 程序计数器1:作用:2:特点:1:线程私有2:内存不会溢出 栈1:介绍:2:问题辨析: 程序计数器 1:作用: 程序计数器的作用就是记录下一条…...
【kotlin 】内联类(value class / inline class)
官方文档:https://kotlinlang.org/docs/inline-classes.html 注:inline class 关键字已经被废弃,取而代之的是value class。现在使用内联类需要定义类为value class,并使用JvmInline注解进行标注。 一、使用场景 有时候ÿ…...
【SpringBoot】使用IDEA创建SpringBoot项目
1、使用SpringBoot脚手架创建 我们使用SpringBoot的脚手架Spring Initializr创建,如图所示: 2、选择SpringBoot版本 最开始做项目时候,组长说创建一个 springboot 2.5.4 的项目,mysql使用 5.6.X ,maven使用是3.6.X…...
C++设计模式(原型、代理、适配器、组合)
一、原型模式 1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式允许通过复制现有的对象来创建新对象,而不是通过实例化类来创建。这种方式可以避免创建重复的对象,从而提高性能和降低内存消耗。 2.组成 …...
如何在CentOS 7上使用FreeIPA设置集中式Linux身份验证
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 FreeIPA 是一个针对 Linux 的开源安全解决方案,提供帐户管理和集中式身份验证,类似于微软的 Active Direc…...
vue2播放视频和预览文件的组件以及使用方法
##文件预览组件 按照组件 解决展示pdf的问题 npm install pdfh5 npm install canvas2.8.0 --ignore-scripts npm install --save dommatrix npm install --save web-streams-polyfill解决excel和docx预览的问题 npm install vue-office/docx vue-demi0.14.6 npm inst…...
思源宋体TTF:5分钟掌握免费商用中文字体的完整使用指南
思源宋体TTF:5分钟掌握免费商用中文字体的完整使用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 如果你正在寻找一款既专业又免费的中文字体,那么思源宋体…...
LVGL事件处理实战:从按钮点击到滚动列表,手把手教你写交互代码(附避坑指南)
LVGL事件处理实战:从按钮点击到滚动列表,手把手教你写交互代码(附避坑指南) 在嵌入式GUI开发中,流畅的交互体验往往决定了产品的成败。LVGL作为轻量级通用图形库,其事件处理机制是构建动态界面的核心。本文…...
终极指南:8步搭建你的私人游戏串流服务器Sunshine
终极指南:8步搭建你的私人游戏串流服务器Sunshine 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上流畅玩PC游戏吗?Sunshine是一款免费开源…...
碳感知Transformer与硬件协同优化框架解析
1. CATransformers:碳感知Transformer与硬件协同优化框架解析在AI技术快速发展的今天,Transformer模型已成为自然语言处理、计算机视觉和多模态任务的核心架构。然而,这些模型的广泛部署带来了显著的碳排放问题——不仅包括训练和推理过程中的…...
汇编新手避坑指南:搞懂AX、BX、CX、DX这些“双面”寄存器,才算入门
汇编新手避坑指南:搞懂AX、BX、CX、DX这些“双面”寄存器,才算入门 第一次接触汇编语言时,那些神秘的寄存器名称总让人望而生畏。尤其是AX、BX、CX、DX这几个"双面人",一会儿能拆成AH和AL,一会儿又能合体使用…...
CircuitMind框架:突破LLM在数字电路设计中的布尔优化障碍
1. 项目概述:CircuitMind框架的创新价值在数字电路设计领域,布尔优化一直是硬件工程师面临的核心挑战。传统设计流程中,工程师需要手动应用卡诺图、奎因-麦克拉斯基算法等技巧来优化门级网表,这一过程既耗时又高度依赖专家经验。近…...
手把手复现:用GCC编译选项关闭栈保护,一步步演示缓冲区溢出攻击(附完整代码)
从零构建缓冲区溢出攻击实验:GCC编译选项与漏洞利用实战指南 缓冲区溢出攻击作为系统安全领域的经典课题,至今仍在各类CTF竞赛和实际渗透测试中频繁出现。对于刚接触底层安全的研究者而言,亲手复现一次完整的溢出攻击过程,远比阅读…...
从STM32F103到GD32F303:如何用CubeMX和Keil5低成本‘平替’升级你的项目?
从STM32F103到GD32F303:低成本高性能迁移实战指南 在嵌入式开发领域,芯片选型往往需要在性能与成本之间寻找平衡点。对于已经熟悉STM32F103系列开发但面临成本压力或性能瓶颈的工程师来说,GD32F303系列提供了一个极具吸引力的替代方案。这款国…...
Qalculate! 终极数学计算库:从新手到专家的完整指南
Qalculate! 终极数学计算库:从新手到专家的完整指南 【免费下载链接】libqalculate Qalculate! library and CLI 项目地址: https://gitcode.com/gh_mirrors/li/libqalculate Qalculate! 是一个功能强大的开源数学计算库,它提供了从简单算术到复杂…...
LinkSwift网盘直链助手:让你的下载体验更简单高效
LinkSwift网盘直链助手:让你的下载体验更简单高效 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...
