redis高级篇(2)---主从

news2024/11/27 21:05:41

一)搭建主从架构:

单节点Redis的并发能力是有限的,所以说要想进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离,因为对于Redis来说大部分都是读多写少的场景,更多的要进行读的压力,最基本都要是三台机器,一主两从;

计划是在一个linux服务器上面开启3个Redis实例来进行模拟主从集群

在真实的开发环境中,可以是IP地址不相同,但是端口号可以相同

一)要在同一台linux服务器开启个实例,必须要准备三份不同的配置文件和目录,配置文件所在的目录就是工作目录,下面我们就在tmp目录下面的temp目录下面创建了三个目录

7001 7002 7003

 

二)关闭AOF持久化方式,启用RDB持久化方式

三)拷贝redis.conf配置文件到每一个实例目录

四)修改每一个实例的端口和工作目录

修改每一个文件夹下面的配置文件,将端口号修改成7001 7002 7003,将RDB文件保存位置都修改为自己的文件所在的目录

五)打开三个窗口,分别启动redis

 

六)搭建主从节点,在两个从结点之间执行命令slaveof IP地址 端口号

info replication来去检查主节点的连接信息

Redis主从第一次同步是全量同步,会将内存生成快照,整体发送给salve,下面来解析一下全量同步的过程

1)从节点要执行一个replicaof命令,建立连接,并且指定master的IP地址和端口号,一旦建立成功slave就可以向master发送请求了,来进行请求数据同步;

2)主节点会进行判断你是否是第一次来,如果你是第一次来,那么主节点会把所有的数据返回给从节点,如果你不是第一次来,那么只是会返回部分的数据,你缺多少,我给你多少

3)如果是第一次来,那么主节点会向从节点发送自己的版本信息,然后从节点会将这个版本的信息记录;

4)如果主节点判断是全量同步,那么主节点的主线程会执行bgsave命令,生成一个子进程来生成一个RDB文件,这样对于主进程没有什么影响,主进程继续去处理用户请求;

5)RDB文件里面记录了完整的内存信息,然后主进程会发送这个RDB信息发送给我们的从节点,从节点拿到这个RDB文件就是相当于是拿到了主节点的全部数据了,然后从节点会把本地的RDB文件进行清空,然后会进行加载发送过来的RDB文件,这样master和slave节点基本一致;

6)因为在bgsave异步执行的过程中,那么主进程还是会进行处理用户的请求的,那么会有新的数据写入到主节点的内存中,但是这些新的数据并没有发送给主节点,所以master的主进程除了要进行处理新的数据之外,主进程还会把这些命令记录到repl_backlog这样的内存缓冲区中,repl_backlog这样的缓冲区会进行记录在bgsave期间收到的新的命令,只要未来从节点成功收到了bgsave的RDB文件再来执行repl_backlog中的所有命令,就是master节点的完整数据;

7)主节点会将repl_backlog中的所有的命令发送给从节点,从节点去执行接收到的命令,从而保证master和slave节点中的数据是完全一致的,后续再来有独立进程将这些repl_backlog中的命令发送给slave节点

8)全量同步速度比较慢,只有在第一次建立连接才去做;

由此可知master是如何来进行判断slave是不是第一次来进行同步数据呢?

1)Replication ID:简称为是replid,是数据集的标记,ID相同则说明是同一数据集,每一个master都具有唯一的ID,后续的salve会进行继承master节点的repliID

2)offset:也被称之为是偏移量,随着记录在repl_backlog中的数据增多而逐渐增大,slave在完成同步的时候也会进行记录当前同步的offset,如果slave的offset小于master节点的offset,说明slave数据落后于master,需要进行数据的更新,slave中的offset是永远小于master中的offset的,因为从节点的offset是从主节点中拷贝过来的,如果主节点的offset值等于从节点的offset值,说明主从数据一致

3)因此slave在做数据同步的时候,必须向master声明自己的replication ID和offset(判断进度),master才可以进行判断自己到底要同步哪些数据;

master是如何来进行判断slave节点是不是第一次来做同步的?

1)直接判断offset是否为0即可;

2)难道说主要offset大于0就一定是第一次做同步吗?就一定不是第一次来吗?假设你的offset很大,但是此时发送过来的主节点的Replication ID和主节点ReplicationID不相同,你是从其他的master节点拷贝过来的,所以此时的offset是无意义的;

3)总结:因为每一个节点都存在着唯一的Replication ID,所以判断从节点是否是第一次来进行更新数据的依据是,如果主节点的Replication ID和从节点的Replication ID相同,那么说明不是第一次,如果Replication ID不相同,则说明是第一次;

全量同步的流程:

1)从节点向主节点请求增量同步

2)master节点会进行判断从节点的Replication ID是否和主节点自己的Replication ID是否一致,如果不同,说明要进行全量同步,拒绝增量同步;

3)master的主进程会开启一个分进程将完整的内存数据生成RDB文件,然后将这个RDB文件发送给slave节点

4)接下来从节点会清空本地数据,会进行加载master中的RDB文件;

5)主节点的主进程会将RDB期间的命令记录在repl_backlog,并会开启一个新的进程将log中的命令发送给slave;

6)slave会不断的执行log中的命令;

主从第一次同步是全量同步,但是如果slave重启之后进行同步,那么一定是执行增量同步,那么在slave再重启的这一段时间,主节点是一定会进行执行用户输入的命令的

1)从节点会向主节点发送Replication ID和offset,主节点判断过了Replication ID和从节点的ReplicationID是相同的,那么主节点会直接向从节点返回一个continue;

2)那么此时主节点想从节点发送数据的时候,就不用写RDB文件了,只不过是从节点在重启的时候丢失了一部分数据,这部分数据就在主节点的repl_backlog里面;

3)既然从节点向主节点发送了一个offset数据,那么主节点只需要定位到repl_backlog中的offset为止(从节点发送过来的offset值)再继续向后读取就可以了,也就是hirepl_backlog中去除掉offset之后的数据,此时从节点只需要执行这些命令就可以把剩下的数据给补上了;

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

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

相关文章

【Android学习专题】java基本语法和概念(学习记录)

学习记录来自菜鸟教程 Java 变量 Java 中主要有如下几种类型的变量 局部变量 在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁类变量(静态变量) 类变量也声…

chatgpt赋能Python-libreoffice_python宏

介绍 LibreOffice是一套免费开源的办公软件,其中包含一个强大的Python宏系统,可以使用Python编写脚本来增强办公软件的功能。本文将介绍LibreOffice Python宏是什么,如何使用Python编写宏,并提供一些示例,以便读者可以…

去付款--支付宝沙箱的简单测试

alipay-demo 进入开发者中心–开发工具–沙箱–设置公钥 搜索电脑网上支付–查看Demo–查看配置类–查看业务逻辑 我们的基础配置类主要是初始化我们的alipay客户端 真正去付款的时候是提交了一个form表单达到一个真正的支付jsp,java代码首先初始化我买的Alipay客户端&#xf…

瑞吉外卖 - 新增分类功能(11)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

网安学习踩坑经验篇

回想学习网络安全一年来,踩了不少坑走了不少弯路,在此稍作总结,希望可以帮助那些想要入门 web 安全或者是想打CTF的同学们一些建议 坑点 先总结一下,我在学习中遇到的坑点 只看视频,眼高手低,不练习&…

【嵌入式Linux】设备树基本语法

设备树基本语法 1_总领-本期设备树视频要怎么讲?讲什么?_哔哩哔哩_bilibili 基本的 特殊的 中断控制 描述GIC控制器 时钟 CPU GPIO 个数,保留范围(起始、长度),个数对应的名字 GPIO映射-这个脚被用了换一…

chatgpt赋能Python-numpy_归一化

NumPy归一化:理解数据规范化的重要性 什么是归一化? 在数据科学和机器学习中,归一化是预处理数据的一种常用技术。归一化是指将数据缩放到一个特定的范围内,通常是0到1或-1到1之间。 例如,我们可能比较一家医院的三…

渗透测试--5.3.使用john破解密码

前言 由于Linux是Internet最流行的服务器操作系统,因此它的安全性备受关注。这种安全主要靠口令实现。 Linux使用一个单向函数crypt()来加密用户口令。单向函数crypt()从数学原理上保证了从加密的密文得到加密前的明…

Java笔记_22(反射和动态代理)

Java笔记_22 一、反射1.1、反射的概述1.2、获取class对象的三种方式1.3、反射获取构造方法1.4、反射获取成员变量1.5、反射获取成员方法1.6、综合练习1.6.1、保存信息1.6.2、跟配置文件结合动态创建 一、反射 1.1、反射的概述 什么是反射? 反射允许对成员变量,成…

基于IC5000烧录器使用winIDEA烧写+调试程序(S32K324的软件烧写与调试)

目录 一、iSYSTEM简介二、如何使用iSYSTEM winIDEA烧写调试程序2.1 打开winIDEA:2.2 新建一个Workspace;2.3 硬件配置:2.4 选择CPU芯片型号:2.5 加载烧写文件:2.6 开始烧录程序:2.7 程序调试Debug:2.7.1 运行程序&…

PCL点云处理之单点选择的交互操作(一百六十七)

PCL点云处理之单点选择的交互操作(一百六十七) 一、效果展示二、实现代码一、效果展示 交互选择点,输出点信息,具体如下图所示 二、实现代码 #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/visualization/pcl_visu

Spring Cloud Alibaba(二)Nacos统一配置管理

目录 一、为什么需要配置中心 二、常用的配置中心 Nacos 的几个概念 三、Nacos配置中心的使用 &#xff08;一&#xff09;properties格式 1、导入依赖 2、在配置中心新建配置 3、修改配置文件名为bootstrap.yml 4、在微服务中添加nacos config服务地址的配置 5、测试…

chatgpt赋能Python-numpy精度

Numpy精度介绍 Numpy是一个用于进行科学计算的Python库&#xff0c;它提供了多维数组对象以及一系列用于操作数组的函数。Numpy的广泛使用使其成为数据科学中的重要组成部分。然而&#xff0c;Numpy中的精度问题却常常被忽视。 浮点数精度问题 在Numpy中&#xff0c;浮点数是…

STL与string类的认识及简单使用

STL与string类的认识及简单使用 一、STL二、string类构造函数容量操作访问及遍历操作迭代器 修改操作非成员函数重载关系运算符重载getline 三、总结 一、STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组…

【计算机毕设】基于SringBoot+Vue的校园二手交易平台(含支付)

在导师的严格指导下&#xff0c;我的毕业设计终于完成了&#xff0c;毕设被推优算是给大学生活画上了圆满的句号&#xff0c;几个月的努力也没白费。在开发的过程中收获了很多&#xff0c;也遇到很多问题&#xff0c;但因怕时间来不及&#xff08;根本不知道截止时间TvT&#x…

点餐小程序实战教程04-餐品分类及餐品数据源设计

我们已经利用一定篇幅实现了店铺信息展示的功能,本篇我们来实现一下点餐的逻辑。点餐的逻辑有以下: 用户打开点餐页面,利用侧边栏导航来切换菜品初始状态用户未点餐,显示一个加号的图标点击加号显示数量,需要将菜品加入购物车,购物车显示选购菜品的数量和总价点击减号可以…

[日记]LeetCode算法·二十五——二叉树⑤ AVL树(插入+删除)附代码实现

本章的代码实现基于上一篇BST与优先队列的基类进行平衡二叉树&#xff0c;即AVL树。 文章目录 AVL的概念AVL查询效率AVL的插入1.插入节点2.更新平衡因子BF3.旋转调整树的结构3.1 LL 右旋3.2 RR 左旋3.3 LR 左右双旋3.4 RL 右左双旋 4 插入总结 AVL的删除1.寻找删除节点2.更新平…

窗口组件元素识别工具

inspect.exe 微软官方工具集成于 Windows SDK 官网下载&#xff1a;https://developer.microsoft.com/zh-cn/windows/downloads/windows-sdk/ FlaUInspect&#xff1a; 第三方开源的识别工具 https://github.com/FlaUI/FlaUInspect UIRecorder&#xff1a; WinAppDriver里…

无状态子域名爆破工具(附下载)

ksubdomain是一款基于无状态子域名爆破工具&#xff0c;支持在Windows/Linux/Mac上使用&#xff0c;它会很快的进行DNS爆破&#xff0c;在Mac和Windows上理论最大发包速度在30w/s,linux上为160w/s的速度。 总的来说&#xff0c;ksubdomain能爆破/验证域名&#xff0c;并且快和…