Redis主从集群-主从复制(通俗易懂)
为什么要搭建主从集群?
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,可以搭建主从集群,实现读写分离。一般都是一主多从,主节点负责写数据,从节点负责读数据,主节点写入数据之后,需要把数据同步到从节点中。
主从复制原理是什么?
主从复制共有三种模式:全量复制、基于长连接的命令传播、增量复制。
全量同步
从节点向主节点请求数据,主节点判断是第一次请求(这里是通过replid判断,不一致),同步版本信息(可以理解为从节点要继承主节点的replid,使其一致),同时执行bgsave,生成rdb,发送给从节点,在rdb生成期间,由于是异步的,主节点redis仍然会正常处理业务,为了避免新增加的数据没有同步给从节点,主节点将收到的写操作命令,写入到 replication buffer 缓冲区里,在从节点解析执行完rdb文件之后,它告诉一下主节点,我执行完了,主节点就把这个缓冲文件发给他,保证数据的一致性。

PS: replication buffer 缓冲区:目的主要就是给从节点发送要同步的数据。
基于长连接的命令传播:
主从服务器在完成全量同步之后,双方之间就会维护一个 TCP 长连接,通过连接继续将写操作命令传播给从服务器,来保证第一次同步后的主从服务器的数据一致性。
增量复制:
由于网络总是爱发脾气,说断开就断开,由于全量同步耗时间,增量同步的出现解决了这个问题。当网络恢复后,主节点会判断这不是第一次请求,告诉从节点,我想增量同步,你做好准备,然后主节点将断线期间所有的更新数据都发送给从节点。他的实现逻辑是靠一个:一个环形的缓冲区(repl_backlog_size ),主节点进行传播指令给从节点的时候,也会指令写在这个缓冲区,所以这个缓冲区里会保存着最近传播的写命令,通过主的写偏移量和从的读偏移量来获取断线期间的要同步的数据,当然如果从服务器判断要读的数据在这个环形缓冲区没有,就会开启全量同步,同时由于这个缓冲区是环形,也会造成数据的覆盖,所以我们要合理的设置该大小,尽量避免全量复制。

相关文章:
Redis主从集群-主从复制(通俗易懂)
为什么要搭建主从集群? 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,可以搭建主从集群,实现读写分离。一般都是一主多从,主节点负责写数据,从节点负责读数据,主节点写入数据…...
【C++算法竞赛 · 图论】图论基础
前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类: 按边的类型分类: 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 前言 图论(Graph theory),是 OI 中的一样很大…...
Java解析实体类的属性和属性注释
前言 获取某个类的属性(字段)是我们经常都会碰到的,通常我们是通过反射来获取的。 但是有些特殊情况下,我们不仅要获取类的属性,还需要获取属性注释。这种情况下,我们只能通过注解去获取注释。可以自己定…...
机器学习KNN最邻近分类算法
文章目录 1、KNN算法简介2、KNN算法实现2.1、调用scikit-learn库中KNN算法 3、使用scikit-learn库生成数据集3.1、自定义函数划分数据集3.2、使用scikit-learn库划分数据集 4、使用scikit-learn库对鸢尾花数据集进行分类5、什么是超参数5.1、实现寻找超参数5.2、使用scikit-lea…...
分享一个Python爬虫入门实例(有源码,学习使用)
一、爬虫基础知识 Python爬虫是一种使用Python编程语言实现的自动化获取网页数据的技术。它广泛应用于数据采集、数据分析、网络监测等领域。以下是对Python爬虫的详细介绍: 架构和组成:下载器:负责根据指定的URL下载网页内容,常用的库有Requests和urllib。解析器:用于解…...
算法:树形dp(树状dp)
文章目录 一、树形DP的概念1.基本概念2.解题步骤3.树形DP数据结构 二、典型例题1.LeetCode:337. 打家劫舍 III1.1、定义状态转移方程1.2、参考代码 2.ACWing:285. 没有上司的舞会1.1、定义状态转移方程1.2、拓扑排序参考代码1.3、dfs后序遍历参考代码 一…...
SQL语句学习+牛客基础39SQL
什么是SQL? SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。 SQL语法 数据库表 一个…...
竞赛常考的知识点大总结(五)动态规划
DP问题的性质 动态规划(Dynamic Programming,DP)是指在解决动态规划问题时所依赖的一些基本特征和规律。动态规划是一种将复杂问题分解为更小子问题来解决的方法,它适用于具有重叠子问题和最优子结构性质的问题。动态规划问题通常…...
如何在 Mac 上恢复已删除的数据
如果您丢失了 Mac 上的数据,请不要绝望。恢复数据比您想象的要容易,并且有很多方法可以尝试。 在 Mac 上遭受数据丢失是每个人都认为永远不会发生在他们身上的事情之一......直到它发生。不过,请不要担心,因为您可以通过多种方法…...
Java笔试题总结
HashSet子类依靠()方法区分重复元素。 A toString(),equals() B clone(),equals() C hashCode(),equals() D getClass(),clone() 答案:C 解析: 先调用对象的hashcode方法将对象映射为数组下标,再通过equals来判断元素内容是否相同 以下程序执行的结果是: class X{…...
github本地仓库push到远程仓库
1.从远程仓库clone到本地 2.生成SSH秘钥,为push做准备 在Ubuntu命令行输入一下内容 [rootlocalhost ~]# ssh-keygen -t rsa < 建立密钥对,-t代表类型,有RSA和DSA两种 Generating public/private rsa key pair. Enter file in whi…...
Error: TF_DENORMALIZED_QUATERNION: Ignoring transform forchild_frame_id
问题 运行程序出现: Error: TF_DENORMALIZED_QUATERNION: Ignoring transform for child_frame_id “odom” from authority “unknown_publisher” because of an invalid quaternion in the transform (0.0 0.0 0.0 0.707) 主要是四元数没有归一化 Eigen::Quatern…...
Linux从入门到精通 --- 2.基本命令入门
文章目录 第二章:2.1 Linux的目录结构2.1.1 路径描述方式 2.2 Linux命令入门2.2.1 Linux命令基础格式2.2.2 ls命令2.2.3 ls命令的参数和选项2.2.4 ls命令选项的组合使用 2.3 目录切换相关命令2.3.1 cd切换工作目录2.3.2 pwd查看当前工作目录2.4 相对路径、绝对路径和…...
Redis常用命令补充和持久化
一、redis 多数据库常用命令 1.1 多数据库间切换 1.2 多数据库间移动数据 1.3 清除数据库内数据 1.4 设置密码 1.4.1 使用config set requirepass yourpassword命令设置密码 1.4.2 使用config get requirepass命令查看密码 二、redis高可用 2.1 redis 持久化 2.1.1 持…...
【记录】海康相机(SDK)二次开发时的错误码
海康相机(SDK)二次开发时的错误码 在进行海康sdk二次开发的时候,经常碰到各种错误,遂结合官方文档和广大网友的一些经验,把这些错误码记录一下,方便查找。笔者使用的SDK版本是HCNetSDKV6.1.9.4。 错误类型…...
端盒日记Day02
JS 本本本本本地存储 localStorage 作用:可以将数据永久存储在本地(用户电脑),除非手动删除,否则关闭页面也会存在 特性:a.可多窗口(页面)共享(同一浏览器可以共享&a…...
考研高数(平面图形的面积,旋转体的体积)
1.平面图形的面积 纠正:参数方程求面积 2.旋转体的体积(做题时,若以x为自变量不好计算,可以求反函数,y为自变量进行计算)...
选择企业邮箱,扬帆迈向商务新纪元!
企业邮箱和个人邮箱不同,它的邮箱后缀是企业自己的域名。企业邮箱供应商一般都提供手机app、桌面端、web浏览器访问等邮箱使用途径。那么什么是企业邮箱?如何选择合适的企业邮箱?好用的企业邮箱应具备无缝迁移、协作、多邮箱管理等功能。 企…...
2024.3.25力扣每日一题——零钱兑换2
2024.3.25 题目来源我的题解方法一 动态规划 题目来源 力扣每日一题;题序:518 我的题解 方法一 动态规划 给定总金额 amount 和数组 coins,要求计算金额之和等于 amount 的硬币组合数。其中,coins的每个元素可以选取多次&#…...
包子凑数【蓝桥杯】/完全背包
包子凑数 完全背包 完全背包问题和01背包的区别就是,完全背包问题每一个物品能取无限次。 思路:当n个数的最大公约数不为1,即不互质时,有无限多个凑不出来的,即n个数都可以表示成kn,k为常数且不为1。当n个…...
Jeandle:基于LLVM的Java JIT编译器架构解析与实战
1. 项目概述与核心价值最近在Java性能优化这个老生常谈的话题里,我又看到了一个新面孔——Jeandle。简单来说,这是一个基于OpenJDK和LLVM构建的Java即时编译器。如果你对JVM的JIT(Just-in-Time Compilation)机制有所了解ÿ…...
“找档难、找档慢”困扰工作?档案宝智能检索功能,让档案查询秒响应
目录 档案之痛:效率与风险并存 破局之道:智能检索成关键 写在最后 在日常办公中,你是否遇到过这样的场景:需要调取一份重要合同档案,翻遍整个文件柜却找不到;领导紧急要一份历史数据,手动搜索了…...
从ARIMA差分到MIM网络:一个老派时间序列技巧如何革新了深度学习预测
从差分思想到记忆网络:传统时间序列技巧如何重塑深度学习架构 在气象预报的雷达回波图中,降水云团的形态每秒钟都在剧烈变化;城市交通流量监测数据里,早晚高峰的波动与平峰期形成鲜明对比;股票市场的价格曲线更是以难以…...
图解人工智能(11)让人惊讶的AI
人工智能已经融入到我们的生活之中,如便捷的刷脸支付,帮我们扫地的机器人。想一想,你身边还有哪些有趣的人工智能设备?以一种设备为例,搜索它的相关信息,看它为我们的生活带来了哪些便利。开放讨论题&#…...
WarcraftHelper魔兽争霸III优化工具:让你的经典游戏重获新生
WarcraftHelper魔兽争霸III优化工具:让你的经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为《魔兽争霸III》…...
can消息的大小端对源码的影响
下图为小端intel型信号,其dbc文件部分源码为:BO_ 1 id_0x1: 8 Vector__XXXSG_ aaa : 0|121 (1,0) [0|0] "" Vector__XXX,这里的0代表的是起始位置为0(起始0->7,8->12为高位)如果将该信号改为大端motorola型&#…...
从癌症研究到企业风控:用Python实战Cox比例风险模型(附完整代码与数据)
从医学到商业:Python实战Cox风险模型的企业级应用 在医疗领域,我们关心患者存活时间;在商业世界,我们关注客户生命周期。看似迥异的场景背后,都隐藏着同一个数学工具的身影——Cox比例风险模型。这个诞生于1972年的生存…...
农业大宗商品与气候数据融合:MCP架构下的数据工程实践
1. 项目概述:当农业大宗商品遇上气候数据最近在做一个挺有意思的项目,核心是把农业大宗商品的数据和气候数据给打通了。听起来好像是个挺宏大的概念,对吧?其实说白了,就是想把“地里长的”和“天上变的”这两件事&…...
SpringBoot项目启动报错Could not resolve placeholder?别慌,这10种排查思路总有一种能帮你搞定
SpringBoot配置占位符解析失败的10种深度排查策略 当你正沉浸在SpringBoot项目的开发中,突然控制台抛出那行刺眼的红色错误——"Could not resolve placeholder xxx in value ${xxx}",这种场景对于Java开发者来说再熟悉不过。这个看似简单的报…...
告别硬编码!SAP ABAPer必学的5个POPUP函数实战用法(附完整代码)
告别硬编码!SAP ABAPer必学的5个POPUP函数实战用法(附完整代码) 在SAP ABAP开发中,交互设计往往决定了用户体验的好坏。想象一下这样的场景:用户在执行关键操作时缺乏明确确认,导致数据误删;或者…...
