Redis主从数据同步过程:命令传播、部分重同步、复制偏移量等

请记住胡广一句话,所有的中间件所有的框架都是建立在基础之上,数据结构,计算机网络,计算机原理大伙一定得看透!!~

1. Redis数据同步

1.1 数据同步过程

大家有没想过为什么Redis多机要进行数据同步?不会是MySQL主从架构要数据同步,Redis就照猫画虎吧。

虽然这两者有关系型数据库和非关系型数据库的差异,但都是作为存储数据的数据库系统。而主从架构的目的就在于对数据有多个"备份",有了多个"备份",就自然而然衍生出众多好处。如负载均衡、灾难恢复、数据备份。

既然要"备份",那数据同步就必不可少了。Redis主从数据同步大致的过程如下。

  1. 首先,从服务器会先向主服务器发送SYNC命令
  2. 收到命令后,Redis主服务器会执行BGSAVE命令来生成一个RDB文件,并使用AOF缓冲区来记录在生成期间执行的写命令。关于BGSAVE命令和SAVE命令的区别,大家可以往前阅读我写的Redis系列文章。
  3. 完成第二步后,主服务器会将RDB文件发送给从服务器,让从服务器同步RDB文件数据。
  4. 当然这还没完,在生成RDB文件的过程中,仍然会有其他写命令到达服务器。Redis主服务器的AOF缓冲区会继续发送给从服务器,让它们之间的数据同步至最终状态

1.2 命令传播

有了AOF缓冲区的概念还没完,Redis主从复制还有一个命令传播的概念等着你去学。

从服务器使用SYNC进行初次数据同步后,主、从服务器的数据库状态并不是每时每刻都保持一致的,这种情况反而是常态。肯定不能为了一条写指令的差异就重新执行SYNC命令,因为SYNC命令是一个非常耗费资源的操作。

这种情况Redis主服务器会将造成主从服务器数据不一致的写命令,即最近执行的写命令,发送给从服务器执行。这便是命令传播的过程,当从服务器执行命令后,主从服务器的数据库状态也就保持了一致。

如果后续有新的命令写入主服务器,主服务器会继续重复命令传播的过程。

1.3 部分重同步

主从服务器断线的话,假设你是Redis开发者,要怎么高效地恢复主、从服务器数据同步的状态。

如果还是用的RDB文件来同步,也太浪费资源了。有可能只是短时间断线,执行的写命令不过几十个,上文我已经提到SYNC命令是很耗费资源的一种操作。

能不能有一支记号笔,在主、从服务器断线时在主服务器的命令队列画下一个记号?

其实Redis除了提供SYNC命令的支持,还有一个叫PSYNC命令

主从服务器断线后,Redis从服务器会发送一个PSYNC命令给主服务器。收到命令后主服务器会将两者断线期间执行的写命令一条不剩地发送给从服务器。

从服务器执行命令后,主、从服务器的数据也就同步了。这种同步方式也叫部分重同步

1.4 复制偏移量

提前剧透下,前面提到的记号笔就是复制偏移量,命令队列也就是复制积压缓冲区队列

Redis主、从服务器都会去维护一个复制偏移量,复制偏移量是什么?例如主从服务器的初始偏移量都是0,主服务器发送给从服务器N字节数据后,主从服务器的偏移量就会 + N。复制偏移量通过该数值来代表主服务器发送给从服务器的字节总量

通过复制偏移量就可以来记录同步状态。

Redis其实有是一个容器来存储命令传播的写命令,命令传播的命令保存在一个有复制偏移量标识的复制积压缓冲区队列。

从服务器发送PSYNC命令给主服务器,还会同时发送从服务器的复制偏移量。主服务器只要根据该复制偏移量在复制积压缓冲区队列中找到对应的命令,就可以发送相关命令给到从服务器。

2. 服务器运行ID

每个Redis节点都有自己的服务器运行ID,这个ID由服务器启动时自动生成。

当从服务器对主服务器进行初次复制时,主服务器会将自己的运行ID传送给从服务器,而从服务器则会将这个运行ID保存起来。

当断线后数据同步时,从服务器会向当前连接的主服务器发送之前保存的主服务器运行ID

如果此时主服务器发现从服务器发送的运行ID与自己的不一致。那就说明此时的主服务器是新的主服务器,它也没有复制积压缓冲区队列,也就不能进行部分重同步。此时Redis主服务器会向从服务器发送RDB文件来进行数据同步。

3. Redis心跳检测

从服务器默认会每秒一次向主服务器发送心跳检测命令,如果主服务器超过1s没有收到replconf命令,说明主从服务器的网络连接有问题了。

以下是心跳检测命令。

REPLCONF ACK <replication_offset>

同时这个心跳检测命令还会附带传送一个复制偏移量,也就是上文的replication_offset

在心跳检测时的过程中,如果主服务器发现他们的复制偏移量不一致,就会通过该偏移量找到从服务器丢失的写命令,从而发送给从服务器保持同步。

到这我们就知道了,心跳检测不仅仅能让主服务器检测从服务器是否存活。Redis开发者很聪明,在从服务器发送心跳检测命令时添加复制偏移量,让心跳检测也具有检测命令丢失的功能。

 你好,我是胡广。 致力于为帮助兄弟们的学习方式、面试困难、入职经验少走弯路而写博客 🌹🌹🌹 坚持每天两篇高质量文章输出,加油!!!🤩

 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注     吧 我会尽力带来有趣的内容 。

 😎感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以      给我留言咨询,希望帮助更多的人

更多专栏:
📊 Java设计模式宝典:从入门到精通(持续更新)

📝 Java基础知识:GoGoGo(持续更新)

⚽ Java面试宝典:从入门到精通(持续更新)

🌟 程序员的那些事~(乐一乐)

🤩 Redis知识、及面试(持续更新)

🚀 Kafka知识文章专栏(持续更新)

🎨 Nginx知识讲解专栏(持续更新)

📡 未完待续。。。

🎯 未完待续。。。

🔍 未完待续。。。

感谢订阅专栏 三连文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/873843.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[数据集][目标检测]水面垃圾检测数据集VOC+YOLO格式2027张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2027 标注数量(xml文件个数):2027 标注数量(txt文件个数):2027 标注…

SAP 免费学习网站推荐

1、https://www.guru99.com/ 可以看到有很多的开发语言可以学习。其中就有SAP。 点击SAP菜单后,可以看到每个模块的操作 每个模块下面都有操作的截图,结合翻译软件看的话很容易看懂 2、https://community.sap.com/ 这个是SAP官方的社区&#xff0c…

[数据结构] 开散列法 闭散列法 模拟实现哈希结构(一)

标题:[数据结构] 开散列法 && 闭散列法 模拟实现哈希结构 个人主页:水墨不写bug 目录 一、闭散列法 核心逻辑的解决 i、为什么要设置位置状态?(伪删除法的使用) ii、哈希函数的设计 接口的实现 1、插入&a…

STM32 RTC实时时钟

RTC实时时钟 BKP可以在VBAT维持供电时,完成主电源掉电时,保存少量数据的任务。备份寄存器和VBAT引脚同时存在,更多是为了服务RTC的。 目前,Linux、Windows、安卓这些系统,底层的计时系统都是使用的Unix时间戳&#xf…

网络编程(UDP)

UDP编程 UDP:全双工通信、面向无连接、不可靠 UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。 适用场景 发送小尺寸…

Anaconda安装和环境配置教程(深度学习准备)

目录 1.下载选择 2.prompt配置 3.虚拟环境配置 4.检查是不是安装成功 5.安装jupter 6.关闭anaconda重新进入 7.总结 1.下载选择 我第一次使用的这个官网上面的邮箱的方式下载的,但是这个方式真的特别慢,于是用了这个清华的镜像网站,网…

基于JAVA+SpringBoot+Vue的工程教育认证的计算机课程管理平台

基于JAVASpringBootVue的工程教育认证的计算机课程管理平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接…

简单比较 http https http2,我们要如何把http升级为https

🧑‍💻 写在开头 点赞 收藏 学会🤣🤣🤣 什么是HTTP 超文本传输​​协议(HTTP)是用于传输诸如HTML的超媒体文档的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但它也…

合宙LuatOS开发板Core_Air780EP使用说明

Core-Air780EP 开发板是合宙通信推出的基于 Air780EP 模组所开发的, 包含电源,SIM卡,USB,天线,音频等必要功能的最小硬件系统。 以方便用户在设计前期对 Air780EP模块进行性能评估,功能调试,软…

精益生产现场管理和改善的实战路径

精益生产,作为制造业的革新利器,不仅能够帮助企业降低成本、提升质量,还能大幅度提高生产效率。但如何将这一理念从理论转化为实际行动,真正落地于生产现场,成为许多管理者面临的难题。今天,就让天行健咨询…

AXI4主机测试

前面对AXI4协议进行了比较详细的分析,本篇文章将会写一个主机代码来实现AXI4协议的时序。 设计思路:本次设计的主要目的是验证AXI4_FULL总线的时序,并且提升对AXI4_FULL总线协议的理解,因此可以采用状态机来控制,先向…

免费SSL证书正在逐渐被淘汰,证书部署自动化的发展趋势即将到来!

目录 背景解决方案。1.使用自签证书(浏览器报警、免费)2.更换支持自签自续的CA机构(免费)3.付费选择CA机构 免费SSL证书正在逐渐被淘汰,证书部署自动化的发展趋势即将到来免费的SSL证书有以下弊端1.有效期短&#xff1…

【数据结构(初阶)】——二叉树

【数据结构】——二叉树 文章目录 【数据结构】——二叉树前言1. 树的概念及结构1.1 树的概念1.2 树的结构 2. 二叉树的概念及结构2.1 二叉树的概念2.2 二叉树的结构2.3 二叉树的性质 3. 二叉树顺序结构及概念3.1 二叉树的顺序结构3.2 堆的概念及结构3.3 堆的实现3.3.1 堆的基本…

探索全球实时云渲染与XR技术的多平台兼容性:谁是行业引领者?

在扩展现实(XR)技术与实时云渲染技术的飞速发展中,多平台兼容性已经成为行业技术竞争的关键要素。能够在不同的平台和设备上高效运行的解决方案,不仅关系到开发效率和场景多样性,还直接影响到用户体验和市场占有率。Pa…

在桌面商业分析应用程序中启用高级 Web UI

挑战 Mercur Business Control 应用程序在企业界,尤其是金融领域,拥有悠久的应用历史。它帮助企业处理、可视化和分析海量数据,从而做出明智的商业决策。 随着产品的不断演进和现代化,Mercur Solutions AB 为该应用创建了 Web 客…

基于SpringBoot的教师人事档案管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Eclipse、Navicat、Maven 系统展示 首页 教师管理 奖惩…

音频-语言大模型原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

[数据集][目标检测]汽油检泄漏检测数据集VOC+YOLO格式237张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):237 标注数量(xml文件个数):237 标注数量(txt文件个数):237 标注类别…

开放式耳机具备什么特点?2024排行前十的四款百元蓝牙耳机推荐

开放式耳机具有以下特点: 佩戴舒适: 开放式耳机通常不需要插入耳道,能减少对耳道的压迫和摩擦,长时间佩戴也不易产生闷热、疼痛或瘙痒等不适,对于耳道敏感或不喜欢入耳式耳机压迫感的人来说是很好的选择。 这类耳机…

​​MEPA(Maximum Efficiency Per Ampere)控制

一.控制目的 与MTPA控制相比,没有忽略电机的铁耗,以电能损耗最小为目的优化电流。 分析思路与MTPA控制类似,在此省略。 二. 推导过程