Redis主从同步机制

Redis主从同步机制是一种分布式数据库架构设计,用于确保主数据库(Master)和从数据库(Slave)之间的数据一致性,从而实现数据冗余、负载均衡、故障转移等功能。以下是Redis主从同步机制的关键要点:

  1. 主从角色

    • Redis主节点负责处理所有的写操作请求,并将这些更改记录在自己的内存中。
    • Redis从节点通过复制主节点的数据及后续的写命令来保持与主节点的数据同步。
  2. 数据同步过程

    • 全量同步(Full Resynchronization): 当一个新的从节点加入集群或者主从节点之间的连接断开重连时,从节点通常会发起全量同步。主节点执行bgsave生成RDB(Redis Database)文件,即Redis的持久化快照,然后将这个快照文件传输给从节点,从节点载入此快照,从而完成初始的数据同步。

    • 增量同步(Partial Resynchronization / Incremental Resynchronization): 全量同步完成后,主节点继续通过命令传播的方式,将之后接收到的所有写命令异步地发送给从节点。从节点接收到这些命令后,执行相同的写操作,从而保持与主节点的实时同步。Redis 2.8版本以后引入了PSYNC命令,可以更加高效且可靠地进行增量同步,即使在部分网络中断后也能尽可能减少数据丢失的风险。

  3. 故障转移与高可用性: 配合Sentinel或Cluster模式,Redis主从架构还可以实现自动故障检测和主节点切换。当主节点出现故障时,从节点可以被提升为主节点,其他从节点再与其同步,确保服务的连续性和数据的完整性。

  4. 读写分离: 在主从结构中,从节点可以承担读取请求的压力,从而减轻主节点的工作负担,实现读写分离,提高系统整体性能。

总之,Redis主从同步机制是一种重要的高可用和扩展性解决方案,它可以保证Redis系统的数据安全性和服务稳定性。

全量同步

步骤如下:(全量)

1.从服务器向主服务器发送同步命令 sync;

2.主数据库接收到同步命令后,会执行 bgsave 命令,在后台生成一个 rdb 文件,并使用一个缓冲区记录从现在开始执行的所有写命令

3.当主服务器执行完 bgsave 命令后,主服务器会将 bgsave 命令生成的 rdb 文件发送给从服务器;

4.从服务器接收到这个 rdb 文件,然后加载到内存 ;之后主服务器会把刚刚在缓存区的命令同步过来,从服务器就会执行这些命名。(两边就一致了

5.以上处理完之后,之后主数据库每执行一个写命令,都会将被执行的写命令发送给从数据库。

增量同步

  1. 初始化阶段

    • 当从节点启动或者重新连接到主节点时,它会向主节点发送PSYNC命令,带上当前从节点已知的复制偏移量和主节点运行的复制ID(在Redis 2.8版本以上)。
  2. 判断同步类型

    • 主节点根据从节点提供的复制偏移量和复制ID决定采取哪种同步方式:
      • 如果从节点的复制偏移量不正确或者复制ID不匹配(例如首次同步或长时间断连后重新连接),主节点会选择进行全量同步(Full Resynchronization)。
      • 如果复制ID匹配且偏移量之后有新的写命令记录,则主节点选择进行增量同步(Partial Resynchronization)。
  3. 增量同步实施

    • 有效情况下,主节点直接将从节点缺失的这部分命令日志(也称为AOF重写日志或复制积压缓冲区中的内容)发送给从节点,而不是整个数据库的数据。
    • 从节点接收并执行这些命令日志,按照相同的顺序更新其内部数据结构,从而达到与主节点一致的状态。
  4. 持续同步

    • 同步完成后,主节点继续将接收到的新写命令通过命令传播的方式发送给从节点,从节点持续执行这些命令以保持同步状态。
    • 从节点也会不断将自己的复制偏移量回传给主节点,以便主节点监控复制进度和健康状况。

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

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

相关文章

每日OJ题_两个数组dp⑤_力扣10. 正则表达式匹配

目录 力扣10. 正则表达式匹配 解析代码 力扣10. 正则表达式匹配 10. 正则表达式匹配 难度 困难 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c…

springboot 整合 mybatis(配置版)

代码及配置整合 创建实体类,与数据库对应 创建 mapper、service 和 controller @AutowiredUserService userService;@ResponseBody@GetMapping("/user")public com.vazquez.bootstudy.model.User getById(@RequestParam("id") Long id) {return userServ…

XC7A35T-2FGG484 嵌入式FPGA现场可编程门阵列 Xilinx

XC7A35T-2FGG484 是一款由Xilinx(赛灵思)制造的FPGA(现场可编程门阵列)芯片 以下是XC7A35T-2FGG484 的主要参数: 1. 系列:Artix-7 2. 逻辑单元数量:33280个 3. 工艺技术:28nm 4. …

设计模式之中介者模式讲解

概念:也称为调停者模式。用一个中介者对象封装一系列对象的交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 抽象中介者:定义中介者的操作。具体中介者:实现…

【HTML】简单制作一个动态变色光束花

目录 前言 开始 HTML部分 效果图 ​编辑​编辑​编辑​编辑总结 前言 无需多言,本文将详细介绍一段代码,具体内容如下: 开始 首先新建文件夹,创建一个文本文档,其中HTML的文件名改为[index.html]&a…

目标检测YOLO实战应用案例100讲-基于卷积神经网络的多尺度特征融合目标检测

目录 前言 存在的挑战 2 相关技术基础 2.1 卷积神经网络 2.2 损失函数

【CTF】rip--堆栈的简单认识

前言 最近在学二进制,准备拿BUUCTF的pwn试试手,还在摸索的阶段,有什么思路出错的地方还请指出。 解题思路 下载文件到kali,查看文件为 64-bit的ELF(ELF为Linux下的可执行文件,相当于Windows的exe&#xff0…

python-flask后端知识点

anki 简单介绍: 在当今信息爆炸的时代,学习已经不再仅仅是获取知识,更是一项关于有效性和持续性的挑战。幸运的是,我们有幸生活在一个科技日新月异的时代,而ANKI(Anki)正是一款旗舰级的学习工具…

GD32F470_GY-68 BMP180 新款 BOSCH温度 代替BMP085 气压传感器模块

2.23 BMP180气压传感器 1BMP180是一款高精度、小体积、低能耗的压力传感器,可以轻松应用在移动设备中.在测量海拔高度时,传统的做法是通过测量某一高度的大气压力,再经过换算才能得到高度数据。BMP180不仅可以实时的测量大气压力&#xff0c…

基于velero和minio实现k8s数据的备份

1.30部署minio rootk8s-harbor:/etc/kubeasz/clusters/k8s-cluster1# docker run \ -d --restartalways -p 9000:9000 -p 9090:9090 –name minio -v /data/minio/data:/data -e “MINIO_ROOT_USERadmin” -e “MINIO_ROOT_PASSWORD12345678” quay.io/minio/minio server…

Netty框架介绍并编写WebSocket服务端与客户端

一、Netty 介绍 Netty 是一个基于 Java NIO(Non-blocking I/O,非阻塞 I/O)的网络通信框架,旨在帮助开发者轻松地编写高性能、高可靠性的网络应用程序。由于其出色的设计和强大的功能,Netty 在企业级应用和开源项目中得…

智慧安防系统EasyCVR视频汇聚平台接入大华设备无法语音对讲的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流,视频画面1、4、9、16个可选,支持自定义视频轮播。EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标…

不同的子序列-java

题目描述(力扣题库115): 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 7 取模。 示例 1: 输入:s "rabbbit", t "rabbit"输出:3 解释: 如下所示…

小型企业网络安全指南

许多小型企业刚刚起步,没有大公司所拥有的相同资源来保护其数据。他们不仅可能没有资金来支持多样化的安全计划,而且也可能没有人力或时间。 网络犯罪分子知道小型企业缺乏这些资源,并利用这些资源来谋取利益。遭受网络攻击后,小…

hyperf websocket

composer require hyperf/websocket-server 配置 Server 修改 config/autoload/server.php&#xff0c;增加以下配置。 <?phpreturn [servers > [[name > ws,type > Server::SERVER_WEBSOCKET,host > 0.0.0.0,port > 9502,sock_type > SWOOLE_SOCK_TCP…

2024年河北省网络建设与运维-省赛-nginx 和tomcat 服务服务步骤

题目&#xff1a; 5.nginx 和tomcat 服务 任务描述&#xff1a;利用系统自带tomcat&#xff0c;搭建 Tomcat网站。 &#xff08;1&#xff09;配置 linux2 为 nginx 服务器&#xff0c;网站目录为/www/nginx&#xff0c;默认文档 index.html 的内容为“HelloNginx”&#xf…

Rust与Go的对比

在各个领域&#xff0c;Rust 都已经成为一流的语言。最近&#xff0c;我们通过将服务的实现从 Go 切换到 Rust&#xff0c;极大地提升了该服务的性能。这里我阐述了重新实现服务为何是有价值的、该过程是如何实现的以及由此带来的性能提升。 Read States 服务 我们从 Go 切换…

01 Php学习:导学篇

Php是什么&#xff1f; PHP 是服务器端脚本语言。 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种通用开源脚本语言&#xff0c;主要用于服务器端开发。PHP脚本在服务器端执行&#xff0c;生成动态网页内容或执行服务器端任务。PHP可以嵌入到HTML中&#xff0c;也…

千视携 NDI 6 轻量化媒体方案亮相北京CCBN展会

展会简介 第30届中国国际广播电视网络技术展览会&#xff08;CCBN&#xff09;将于4月24至26日在北京首钢会展中心举行。此次展会将汇集全球各大数字媒体、广播电视单位以及IT、通信技术厂商。展会重点关注数字化转型、智能媒体、融媒体等主题&#xff0c;并展示最新的5G、4K/8…

MongoDB聚合运算符:$min

文章目录 语法使用空值和缺失值的处理数组操作数的处理 举例在$group阶段使用在$setWindowFields阶段使用在$project阶段使用 $min聚合运算符用于返回最小值。$min对于不同的类型的值使用BSON的比较顺序。 $min可以用于下面的这些阶段&#xff1a; $addFields$bucket$bucketA…