redis集群-主从机连接过程

首先从机需要发送自身携带的replid和offset向主机请求连接

replid:replid是所有主机在启动时会生成的一个固定标识,它表示当前复制流的id,当从机第一次请求连接时,主机会将自己的replid发送给从机,从机在接下来的请求都将携带这个replid,确认主从机在同一复制流中,如果中途主机宕机(重新启动会生成新的replid)或从机宕机但未开启持久化存储(replid保存在内存中,不开启持久化存储配置,重启会消失)都会导致replid丢失,从而执行全量复制

offset:offset表示当前的主机向复制缓冲区复制了多少数据,每当主机向复制缓冲区复制数据时,offset都会增加,从机也是通过记录上次的offset,来判断需要从哪里开始执行复制缓冲区的指令。如果从机因为某些原因断连,如果从机记录的offset没有被最新修改数据的指令在复制缓冲区覆盖,并且保存了replid,则可以进行增量复制,无需全量复制。

复制缓冲区:主机在想从机复制数据时并不会直接将数据复制给从机,而是将操作数据的指令存入数据缓冲区,并且记录offset,在将复制缓冲区传递给从机,从机根据自身记录的offset执行复制缓冲区内记录的指令以达到数据复制效果,复制缓冲区中的命令已满时,新命令会覆盖最早的旧命令,这也就导致了,如果从机请求复制数据时,它携带的offset已经被覆盖,那么他则必须全量复制,不过只要连接不断开,这种情况不会发生。

全量复制就是将从机数据清空,将主机数据完整的通过rdb文件复制到从机,增量复制是基于从机已有的数据和offset通过主机的复制缓冲区保存的指令进行复制,具体取决于从机是否拥有主机的replid以及保存的offset是否被新指令覆盖。

紧接着从机验证replid是否和自己相同,如果相同则证明时本次复制流中的从机,如果不是则证明不是,需要进行全量连接,全量连接时,主机会调用save执行进行数据快照生成rdb文件,rdb文件记录了主机中所有的数据,然后主机将rdb文件发送给从机实现全量复制,而如果replid相同则继续判断offset,如果offset存在于当前复制缓冲区的返回,则发送复制缓冲区的内容让从机数据进行增量复制,如果offset已经被覆盖,则仍然需要全量复制,主机还需发送版本信息进行验证主机从机的redis是否为同一版本,如果不为同一版本仍无法连接。

建立连接后,主机将按照既定周期源源不断的将复制缓存区内容发送给各个从机进行复制。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

5月8日学习记录

_[FBCTF2019]RCEService(preg_match函数的绕过) 涉及知识点:preg_match函数绕过,json的格式,正则回溯 打开环境,要求用json的格式输入 搜索学习一下json的语法规则 数组(Array)用方括…

无意的一次学习,竟让我摆脱了Android控制?

由于鸿蒙的爆火,为了赶上时代先锋。到目前为止也研究过很长一段时间。作为一名Android的研发人员,免不了对其评头论足,指导文档如何写才算专业?页面如何绘制?页面如何跳转?有没有四大组件等等。 而Harmony…

PDF转word转ppt软件

下载地址:PDF转word转ppt软件.zip 平时工作生活经常要用到PDF转word转ppt软件,电脑自带的又要开会员啥的很麻烦,现在分享这款软件直接激活就可以免费使用了,超级好用,喜欢的可以下载

党建教育vr虚拟现实展厅真正实现了绿色、低碳的展示方式

在数字化浪潮席卷的今天,传统企业门户官网已难以满足企业日益增长的展示需求。面对这一挑战,北京华锐凭借深厚的行业经验和领先的技术实力,为您提供全新的元宇宙虚拟展厅制作服务,助您轻松打破现实与虚拟的界限,开启企…

第八届大数据与物联网国际会议(BDIOT 2024)即将召开!

第八届大数据与物联网国际会议(BDIOT 2024)将于2024年9月14-16日在澳门圣若瑟大学举行。数聚未来,物联世界!BDIOT 2024旨在搭建为各位与会代表展示自己研究成果、分享经验、建立联系和开展合作的平台,共同探讨大数据与物联网领域的未来发展方…

人工智能-2024期中考试

前言 人工智能期中考试,认真准备了但是没考好,结果中游偏下水平。 第4题没拿分 (遗传算法:知识点在课堂上一笔带过没有细讲,轮盘赌算法在书本上没有提到,考试的时候也没讲清楚,只能靠猜&…

鸿蒙OpenHarmony开发板:【子系统配置规则】

子系统 子系统配置规则 通过build仓下的subsystem_config.json可以查看所有子系统的配置规则。 {"arkui": {"path": "foundation/arkui", # 路径"name": "arkui" # 子系统名},"ai": {&q…

Java内存是怎样分配的

Java内存是怎样分配的 一、 1. 有些编程语言编写的程序会直接向操作系统请求内存,而 Java 语言为保证其平台无关性,并不允许程序直接向操作系统发出请求,而是在准备执行程序时由Java虚拟机(JVM)向操作系统请求一定的…

微信小程序开发-数据事件绑定

🐳简介 数据绑定 数据绑定是一种将小程序中的数据与页面元素关联起来的技术,使得当数据变化时,页面元素能够自动更新。这通常使用特定的语法(如双大括号 {{ }})来实现,以便在页面上展示动态数据。 事件绑…

CMakeLists.txt语法规则:改变行为的变量说明一

一. 简介 前面一篇文章学习了 CMakeLists.txt语法中的 部分常量变量,具体学习提供信息的变量,文章如下: CMakeLists.txt语法规则:提供信息的变量说明一-CSDN博客 CMakeLists.txt语法规则:提供信息的变量说明二-CSD…

数据结构(链表)

文章目录 1.单链表1.基本介绍1.定义2.逻辑结构 2.应用实例1.需求分析2.思路分析3.完成添加和显示链表信息,直接添加到链表的尾部4.根据排名添加,如果排名重复则给出提示5.根据新节点的编号来修改信息6.删除指定id的节点 3.单链表面试题1.题目2.面试题一2…

全栈开发之路——前端篇(5)组件间通讯和接口等知识补充

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 辅助文档&…

linux的信号量的使用

1.信号量 在多线程情况下,线程要进入关键代码就得获取信号量(钥匙){sem_init(&sem, 0, 0);},没有信号量的情况下就一直等待sem_wait(&sem),只到别人把钥匙(sem_post(&sem))给你。 …

代码随想录Day 41|Leetcode|Python|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…

【C++】---继承

【C】---继承 一、继承的概念及定义1、继承的概念2、定义语法格式3、继承基类成员访问方式的变化 二、基类 和 派生类 的对象之间的赋值转换1、赋值规则2、切片(1)子类对象 赋值 给 父类对象(2)子类对象 赋值 给 父类指针&#xf…

基于JSP物流信息网的设计与实现(论文 + 源码)

【免费】物流信息网实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89267499 基于JSP物流信息网的设计与实现 摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发,使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、…

英语学习笔记6——What make is it?

What make is it? 它是什么牌子的? make n.(产品的)品牌名称    v. 制作 区别:model n.(产品的)型号       n. 模型       n. 模特 make 指的是大的品牌名称, model 是旗下产品…

第2章.STM32开发C语言常用知识点

目录 0. 《STM32单片机自学教程》专栏总纲 2.1. STM32嵌入式开发C语言编程的不同 2.2. C语言常用知识点 2.2.1 位操作 2.2.2 define 宏定义 2.2.3 条件编译 2.2.3.1 #ifdef 2.2.3.2 #ifndef 2.2.3.3 #if !defined 2.2.4 extern 变量声明 2.2.5 typedef 类型别名 …

Sealos急速部署生产用k8s集群

最近一段时间部署k8s全部使用sealos了,整体使用感觉良好,基本没有什么坑。推荐给大家。 使用 Sealos,可以安装一个不包含任何组件的裸 Kubernetes 集群。 最大的好处是提供 99 年证书,用到我跑路是足够了。不用像之前kubeadm安装…

在uniapp中如何安装axios并解决跨域问题

目录 1、安装axios 2、导入 3、使用(发请求) 2.解决跨域问题 1.为什么要解决跨域问题? 2.前端如何解决跨域问题? 1、安装axios npm install axios 2、导入 在main.js中导入使用 import axios from axios; // 创建一个名…