Redis主从结构数据同步分析

news2025/1/16 11:18:50

        Redis主从结构有两种部署方式,如下:

        一主多从的模式是使用最多的模式,通常搭建哨兵或者集群都采用这种方式,但是这种方式主节点复制压力较大,尤其是全量同步的时候。

        级联结构使用情况相对较少,这种结构中间节点是从节点的同时,又是下级的父节点,缓解了主节点复制压力。

        主从同步分为两种,一个是全量同步,一个是增量同步。

1、SYNC(全量同步)

        从服务器向主服务器发送 sync 命令。
        收到 sync 命令后,主服务器执行 bgsave 命令,用来生成 rdb 文件,并在一个缓冲区中记录从现在开始执行的写命令。
        bgsave 执行完成后,将生成的 rdb 文件发送给从服务器,用来给从服务器更新数据。
        主服务器再将缓冲区记录的写命令发送给从服务器,从服务器执行完这些写命令后,此时的数据库状态便和主服务器一致了。
        SYNC同步过程其实是非常耗时的,耗费IO资源、网络资源。所以2.8版本之后,又新增了PSYNC方式。

2、PSYNC(增量同步)

        PSYNC分为全量同步和部分同步两种。

        如果是初次同步,那跟SYNC是一样的。但是对于断线重连的情况,满足条件的情况下,可以实现只同步断线期间的数据。

        所以PSYNC的部分同步可以提高同步效率。

        那么“满足条件”主要是指偏移量比较满足条件,下面对具体情况进行说明。

复制偏移量

        执行复制的主从服务器都会分别维护各自的复制偏移量:

        主服务器每次向从服务器传播 n 个字节数据时,都会将自己的复制偏移量加 n。

        从服务器接受主服务器传来的数据时,也会将自己的复制偏移量加 n

举个例子:

        若当前主服务器的复制偏移量为 10000,此时向从服务器传播 30 个字节数据,结束后复制偏移量为 10030。

        这时,从服务器还没接收这 30 个字节数据就断线了,然后重新连接上之后,该从服务器的复制偏移量依旧为 10000,说明主从数据不一致,此时会向主服务器发送 psync 命令。

复制积压缓冲区

        Redis复制积压缓冲区是一个固定长度的队列,默认1MB。

        当主节点进行命令传播的时候,也会将数据保存至缓冲区一份,当空间用完后,那么最先保存的数据就会被丢弃。

        当主节点接到从节点psync命令后,查看从节点的复制偏移量,例如当前主节点缓冲区存储的偏移量范围为1000到1200,如果从节点传过来的偏移量是1100,那么主节点就可以将1101到1200的数据同步至从节点;但是如果从节点传过来的偏移量是900,那么说明缓冲区的数据已经无法保证数据一致性了,此时需要进行全量数据同步。

RUN ID

        run id意思是主节点运行时的id,当从节点连接到主节点后,主节点会将自己的运行id发送至从节点,从节点保存。

        当主节点发现从节点传过来的run id与自己的id不一致时,说明从节点是从其他主节点切换过来的,那么也需要进行全量数据同步。

心跳检测

        当完成了同步之后,从服务器会以每秒 1 次的频率,向主服务器发送命令:REPLCONF ACK <replication_offset> 其中 replication_offset 是从服务器当前的复制偏移量。以此来实现数据同步。

        

 

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

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

相关文章

前端AST详解,手写babel插件

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;专注于前端领域各种技术&#xff0c;热衷分享&#xff0c;关注我会给你带来一些不一样的认知和成长。 &#x1f4dd;个人签名&#xff1a;不破不立 &#x1f36c;本文目录&#x1f959;一…

C++课堂整理--第二章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1程序控制结构 语句是程序的基本语法成分。程序设计语言的语句按功能可以分成三类&#xff1a;声明语句 指示编译器分配内存&#xff0c;或者提供程序…

Windows服务器配置证书

以windows server 2012为列 1.打开服务器管理器 2.添加角色和功能 3.点击下一步 4.继续下一步 5.继续下一步 6.选择证书服务 7.添加该功能 8.继续下一步 9.继续下一步 10.继续下一步 11.添加证书颁发机构和证书颁发机构web注册 &#xff0c;然后点击下一步 12.点击安装 13.再次…

Linux|centos二进制方式安装系统和网络监控神器prometheus+grafana(装逼神器它来了)

Prometheus简单介绍&#xff1a; Prometheus使用Go语言开发&#xff0c;是Google BorgMon监控系统的开源版本&#xff0c;怎么产生的就不在这讨论了&#xff0c;反正就是香&#xff0c;简单易用。 2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing F…

apache-atlas-hive-hook-源码分析

Atlas Hook类图 Hive 元数据变更有2种实现&#xff1a; 1)基于 Hook 函数实现&#xff0c;实现类为 HiveHook 2)基于MetaStoreEventListener 实现&#xff0c; 实现类为HiveMetastoreHookImpl 所以提供2 种配置&#xff0c;即配置钩子函数或监听器&#xff0c;我们目前采用的是…

nvm包管理工具下载安装

1&#xff0c;去github官网&#xff0c;输入nvm-windows&#xff0c;点击第一个nvm项目&#xff0c;在右侧点击releases,选择箭头指向的安装包 2&#xff0c;下载很快&#xff0c;但是安装前&#xff0c;得先卸载本机的nodejs,并且为nvm的包创建一个英文文件夹&#xff0c;…

Java---Map双列集合

目录 一、双列集合的介绍 二、Map的使用 1&#xff1a;Map中常见的API &#xff08;1&#xff09;put方法 &#xff08;2&#xff09;remove方法 2&#xff1a;Map的遍历 &#xff08;1&#xff09;通过键找值的方式遍历 &#xff08;2&#xff09;通过键值对对象遍历 &…

FRNet代码

代码目录简简单单&#xff0c;令人心旷神怡。 模型框架&#xff1a; 数据增强包括; 接着看一下数据集&#xff1a; import os from PIL import Image import numpy as np from sklearn.model_selection import train_test_splitimport torch import torch.utils.data as da…

Tomcat+Maven+Servlet安装与部署

文章目录前言一、Tomcat8下载安装二、MavenServlet部署1.创键Maven项目&#xff08;idea2021community&#xff09;2.pom.xml下引入servlet依赖3.main下创建webapp/WEB-INF/web.xml4.验证HttpServlet是否导入&#xff08;配置WebServlet路径&#xff09;5.手动打包web项目6.浏览…

DAMA-CDGA/CDGP数据治理认证包括哪几个方面?

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

【夯实Kafka知识体系及基本功】分析一下消费者(Consumer)实现原理分析「原理篇」

Consumer消费者 消费者可以从broker中读取数据。 一个消费者可以消费多个topic中的数据&#xff08;其中一个partion&#xff09;。 Consumer Group&#xff08;消费组&#xff09; 每个Consumer属于一个特定的Consumer Group。 可为每个Consumer指定group name&#xff0c…

自动驾驶--定位技术

[整理自百度技术培训中心课程](https://bit.baidu.com/products?id70) 为什么无人车需要精确的定位系统 在地下车库实现自动泊车的一个非常关键的技术是什么呢&#xff1f;那就是定位技术。 为什么无人车需要一个精确的定位系统。为什么无人车需要精确的定位系统&#xff…

网络线缆连接器和线槽

一、信息插座 1、信息插座简介 信息插座是终端(工作站)与水平干线子系统连接的接口,在水平干线子系统中双绞线的两 端是直接压接到配线架和信息插座中的,不需要跳线。 2、信息插座的配置 综合布线系统的设计,应该根据实际情况确定 所需信息插座个数和分布位置,也就决…

计算机的另一半

本篇先介绍了计算机中数字编码&#xff0c;地址的概念。然后介绍了组成计算机的另外一半内容&#xff0c;也就是CPU&#xff0c;和前面的计算机一半合起来就可以组成一个简易版的计算机了。至此终于大概看到了计算机的全貌。 数字编码系统 这里我们简单说一下计算机里数字编码…

智慧环卫解决方案-最新全套文件

智慧环卫解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧环卫全套最新解决方案合集一、建设背景 城市环境卫生管理是一项复杂而系统的社会工程&#xff0c;是与人民群众生活联系最密切的重要工作之一。环卫水平不仅是一个城市的“脸面”&#xff0…

kotlin 之单例类详解

object 单例对象的声明&#xff1a; object Model{var temp "1"val temp2 "2"const val temp3 "3" }抛出疑问&#xff1a;使用object修饰的类&#xff0c;是哪种类型的单例模式 这里我们先回顾一下java六种单例模式 1. 饿汉式 public c…

String、StringBuffer和StringBuilder类的区别

在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。String 类是不可变类&#xff0c;即一旦一个 String 对象被创建以后&#xff0c;包含在这个对象中的字符序列是不可改变的&#xff0c;直至这个对象被销毁。 Java 提供了两个可变字符串类 Stri…

EFLFK——ELK日志分析系统+kafka+filebeat架构(3)

ELFK——ELK结合filebeat日志分析系统&#xff08;2&#xff09;_Evens7xxX的博客-CSDN博客 紧接上期&#xff0c;在ELFK的基础上&#xff0c;添加kafka做数据缓冲 附kafka消息队列 nginx服务器配置filebeat收集日志&#xff1a;192.168.116.40&#xff0c;修改配置将采集到的…

SoC-ZCU106求解非线性方程(一):环境安装

一、大家好久不见&#xff0c;本次给大家带来的是SoC求解非线性方程问题。计划发布三篇文章&#xff0c;这是第一篇----环境安装。 主要的解决的问题是&#xff1a;PL侧给PS传输数据&#xff0c;然后PS将数据作为已知量求解非线性方程&#xff0c;为了简化问题复杂度&#xff…

中睿天下实力入选2022信创产业独角兽TOP100

近日&#xff0c;中国科学院主管的权威媒体《互联网周刊》、德本咨询、eNet研究院联合发布了“2022信创产业独角兽100强”榜单。中睿天下凭借在网络安全攻击溯源领域的深耕、硬的技术能力和突出的产品创新力&#xff0c;实力入选榜单&#xff0c;在上榜的安全企业中&#xff0c…