Redis 的主从复制

Redis 的主从复制

  • 1、主从复制的实现
  • 2、主从复制的同步功能(PSYNC)
    • 2.1、部分重同步

       本文讲解的Redis 主从复制机制,是基于 2.8及以后的版本而言,2.8以前的版本主从复制机制与此有所不同,请知悉。

       Redis的复制功能分为 同步 (psync) 和 命令传播 (command propagate)两个操作。

 

1、主从复制的实现

 

  • 设置主服务器的地址和端口

    # 查看redis服务在集群中的主从角色
    info replication
    # 设置主从关系:设从不设主
    # 在Redis5.0之前的版本中,配置主从复制通常使用SLAVEOF命令。从Redis5.0开始,推荐使用REPLICAOF命令来代替SLAVEOF
    ## 在从服务器上设置
    slaveof <主服务器ip> <主服务端口>
    
  • ② 建立套接字连接

  • ③ 发送 PING 命令

  • ④ 身份验证

  • ⑤ 发送端口信息

  • 同步

    • PSYNC 执行完整重同步部分重同步
  • 命令传播

    • 完成同步后,主从服务器就进入命令传播阶段。当主服务器的数据库状态被修改(例如,执行了写命令如SET、DEL等)时,主从服务器的数据库状态可能会出现不一致。为了解决这个问题,主服务器会将导致不一致的写命令(即主服务器接收到的新写命令)发送给从服务器,从服务器在接收到这些命令后会执行它们,从而使其数据库状态与主服务器保持一致。

 

2、主从复制的同步功能(PSYNC)

 

      2.8及以后的版本主从复制主要是基于 PSYNC 命令,PSYNC命令具有完整重同步(full resynchronization) 和部分重同步(partial resynchronization)两种模式。

  • 完整重同步:用于处理初次主从复制的情况。通过让主服务器创建并发送 RDB 文件,以及向从服务器发送保存在缓冲区里面的写命令来进行同步。
  • 部分重同步:用于处理断线(网络抖动等)后主从复制情况。当从服务器在断线后重新连接主服务器时,如果条件允许(如从服务器提供的复制偏移量在复制缓冲区内),主服务器将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器接收并执行这些写命令。

 
在这里插入图片描述

使用 PSYNC 命令来进行断线后重复制时间流程图:

时间线主服务器从服务器
T0主从服务器完成同步主从服务器完成同步
T1执行并传播 SET k11 v11执行主服务器传来的 SET k11 v11
T2执行并传播 SET k22 v22执行主服务器传来的 SET k22 v22
T180执行并传播 SET k99 v99执行主服务器传来的 SET k99 v99
T181执行并传播 SET k100 v100执行主服务器传来的 SET k100 v100
T182主从服务器连接断开主从服务器连接断开
T183执行 SET k101 v101断线中,尝试重新连接主服务器
T184执行 SET k102 v102断线中,尝试重新连接主服务器
T185执行 SET k103 v103断线中,尝试重新连接主服务器
T186主从服务器重新连接主从服务器重新连接
T187向主服务器发送 PSYNC 命令
T188向从服务返回 +CONTINUE 回复,表示执行部分重同步
T189接收 +CONTINUE 回复,准备执行部分重同步
T190向从服务器发送 SET k101 v101、SET k102 v102、SET k103 v103 三个命令
T191接收并执行主服务器传来的三个 SET 命令
T192主从服务器再次完成同步主从服务器再次完成同步

2.1、部分重同步

 
部分重同步主要有以下三个部分构成:

  • ① 主服务器的复制偏移量(replication offset) 和从服务器的复制偏移量。
  • ② 主服务器的复制积压缓冲区(replication backlog)
  • ③ 服务器的运行ID(runid)

 

       重点说一下主服务器的复制积压缓冲区:当主服务器进行命令传播时,它不仅将写命令发送给所有从服务器,还会将写命令入队到复制积压缓冲区。主服务器的复制积压缓冲区会保存一部分最近传播的写命令,并且复制积压缓冲区会为队列中的每个字节记录相应的复制偏移量。复制积压缓冲区设置的默认大小为 1MB.

 
 
 
 
 
 
 
.

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

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

相关文章

远程点击没反应

目录 todesk远程登录后点击没反应 解决方法&#xff1a; 方法1 快捷键&#xff1a; 方法2 界面点击Ctrl Alt Delete todesk&#xff0c;向日葵远程登录后点击没反应 todesk远程登录后点击没反应 解决方法&#xff1a; 方法1 快捷键&#xff1a; Ctrl Alt Delete 方法…

【Python从入门到进阶】54、使用Python轻松操作SQLite数据库

一、引言 1、什么是SQLite SQLite的起源可以追溯到2000年&#xff0c;由D. Richard Hipp&#xff08;理查德希普&#xff09;所创建。作为一个独立的开发者&#xff0c;Hipp在寻找一个能够在嵌入式系统中使用的轻量级数据库时&#xff0c;发现现有的解决方案要么过于庞大&…

DML操作表的数据

一、增加数据 语法&#xff1a; INSERT [INTO] 表名 [( 列名表 )] VALUES ( 值列表 ) 1.1 插入全部字段 l 所有的字段名都写出来 INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3); l 不写字段名 INSERT INTO 表名 VALUES (值1, 值2, 值3…); 注&…

吴恩达机器学习笔记:第 9 周-16推荐系统(Recommender Systems) 16.5-16.6

目录 第 9 周 16、 推荐系统(Recommender Systems)16.5 向量化&#xff1a;低秩矩阵分解16.6 推行工作上的细节&#xff1a;均值归一化 第 9 周 16、 推荐系统(Recommender Systems) 16.5 向量化&#xff1a;低秩矩阵分解 在上几节视频中&#xff0c;我们谈到了协同过滤算法&…

Unity VR在编辑器下开启Quest3透视(PassThrough)功能

现在有个需求是PC端串流在某些特定时候需要开启透视。我研究了两天发现一些坑,记录一下方便查阅,也给没踩坑的朋友一些思路方案。 先说结论,如果要打PC端或者在Unity编辑器中开启,那么OpenXR当前是不行的可能还需要一个长期的过程,必须需要切换到Oculus。当然Unity官方指…

胆子真大,敢搞B站

今天给大家分享一款浏览器插件&#xff0c;能让你的B站在电脑端访问时候会更高级 作者已经开源到Github Star数量还在持续上升中 来看下这款插件究竟具备哪些功能 首先是开启首页干净模式&#xff0c;也就是去除大屏 正常情况我们访问B站是这个样子的~ 开启总开关后 首页的视…

SM4-GCM Library代码示例

sm4-gcm加密解密测试代码: fn main() {let key Sm4Key([0u8; 16]);let nonce [0u8; 12];let plaintext b"Hello World!";let ciphertext sm4_gcm::sm4_gcm_encrypt(&key, &nonce, plaintext);println!("Encrypted: {}", hex::encode(&cip…

K-AI01,K-AO01,K-BUS02和利时

K-AI01,K-AO01,K-BUS02和利时1.将工程师站的计算机开机&#xff1b;2.开机后鼠标双击桌面上的“maintenance tool”图标&#xff0c;K-AI01,K-AO01,K-BUS02和利时。出现如下图标&#xff1a; 按顺序点击”图标中的箭头所指的按钮&#xff0c;出现如下画面选中画面中需要强制的逻…

MybatisPlus入门用法

目录 1.引入依赖 2.继承BaseMapper 常见注解 常见配置 1.引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency> 2.继承Bas…

next水和错误

产生原因 应该是和预渲染有关&#xff0c;官方也有谈到 水和错误主要原因 这个主要事服务器端渲染和客户端渲染结果不一致&#xff0c;客户端再渲染导致的错误&#xff0c;主要结果就是耗费性能&#xff0c;当然也可以关闭提示错误 具体解决措施可以看看官方文档参考 相关的…

ACE框架学习4

目录 ACE Proactor框架 异步I/O工厂类 ACE_Handler类 前摄式Acceptor-Connector类 ACE_Proactor类 ACE Streams框架 ACE_Model类 ACE_Streams类 ACE Proactor框架 ACE Proactor框架实现了proactor模式&#xff0c;也就是异步网络模式&#xff0c;允许事件驱动…

C++内存管理(2)+模版初阶

目录 1.内存的划分 2.内存泄漏 3.模版初阶 &#xff08;1&#xff09;模版的引入 &#xff08;2&#xff09;函数模版 &#xff08;3&#xff09;类模版 &#xff08;4&#xff09;类型的不匹配问题 1.内存的划分 &#xff08;1&#xff09;C里面&#xff0c;把内存划分为…

漫谈ApplicationContext和BeanFactory的区别

各位大佬光临寒舍&#xff0c;希望各位能赏脸给个三连&#xff0c;谢谢各位大佬了&#xff01;&#xff01;&#xff01; 目录 1.背景介绍 2.细述ApplicationContext和BeanFactory 3.总结 1.背景介绍 当我们使用SpringBoot创建项目的时候会看到一串代码&#xff1a…

全面理解BDD(行为驱动开发):转变思维方式,提升软件质量

在传统的软件开发流程中&#xff0c;开发人员和测试人员的工作通常是相互独立的。开发人员负责编写代码&#xff0c;测试人员负责找出代码中的问题。然而&#xff0c;这种方法可能导致沟通不足&#xff0c;而且会浪费时间和资源。为了解决这些问题&#xff0c;出现了一种新的开…

Linux cmake 初窥【3】

1.开发背景 基于上一篇的基础上&#xff0c;已经实现了多个源文件路径调用&#xff0c;但是没有库的实现 2.开发需求 基于 cmake 的动态库和静态库的调用 3.开发环境 ubuntu 20.04 cmake-3.23.1 4.实现步骤 4.1 准备源码文件 基于上个试验的基础上&#xff0c;增加了动态库…

电文加密(C语言)

一、题目说明&#xff1b; 即第1个字母变成第26个字母&#xff0c;第i个字母变成第(26 - i 1)个字母&#xff0c;非字母字符不变。 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h&g…

过拟合和欠拟合的学习

1.什么拟合 就是说这个曲线能不能很好地描述某些样本数据&#xff0c;并且拥有较好的泛化能力。 2.什么是过拟合 过拟合就是曲线太过于贴切训练数据的特征了&#xff0c;在训练集上表现得非常优秀&#xff0c;近乎完美的预测/区分了所有得数据&#xff0c;但是在新的测试集上…

LeetCode—用队列实现栈

一.题目 二.思路 1.后入先出的实现&#xff1a; 创建两个队列来实现栈&#xff08;后入先出&#xff09;&#xff1a; 两个队列&#xff0c;保持一个存数据&#xff0c;另一个为空&#xff0c;入数据&#xff08;push&#xff09;要入不为空的队列&#xff0c;&#xff08;p…

Linux基础之进程的基本概念

目录 一、进程的基本概念 1.1 什么是进程 1.2 PCB的概念 1.3 进程的查看 1.3.1 查看进程方式一 1.3.2 查看进程的方式二 1.4 父进程与子进程 一、进程的基本概念 1.1 什么是进程 进程是什么&#xff1f; 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的…

Linux学习笔记8---官方 SDK 移植实验

在上一章中&#xff0c;我们参考 ST 官方给 STM32 编写的 stm32f10x.h 来自行编写 I.MX6U 的寄存器定义文件。自己编写这些寄存器定义不仅费时费力&#xff0c;没有任何意义&#xff0c;而且很容易写错&#xff0c;幸好NXP 官方为 I.MX6ULL 编写了 SDK 包&#xff0c;在 SDK 包…