Redis全量同步和增量同步原理
目录
- 全量同步
- 增量同步
- 总结
全量同步
主从第一次同步是全量同步:也就是说,当你主从节点连接建立后,需要执行一次全量同步。那么Redis如何实现全量同步呢?
其实本质就是Master 给 slave 发送其保存的RDB文件。slave读取RDB文件恢复数据
详细介绍:
【第一步】slave与master建立连接后,master判断该slave 是否是第一次建立连接。那么该如何判断呢?
其实Master和slave都有一个Replication Id,简称replid,若id一致说明是已经建立过连接了,不需要进行全量同步,则需要进行增量同步。
【第二步】master 执行bgsave,生成RDB文件,同时在生成RDB的同时,也会产生一个baklog文件记录RDB期间的命令,然后将RDB文件发送给从节点,从节点加载RDB文件中的数据。至此全量同步已经完成。
【第三步】也就是后续master和slave在进行同步时候就是增量同步。则需要利用之前生成的baklog文件。
【总结全量同步】
- slave节点先进行增量同步;
- master节点判断replid,发现不一致,拒绝增量同步;
- master将完整内存数据生成RDB,发送RDB到slave;
- slave清空本地数据, 加载master的RDB;
- master将RDB期间的命令记录在repl_baklog,并持续将lgo知道命令发送给slave;
- slave执行接收到的命令,保持与master之间的同步。
增量同步
主从第一次同步是全量同步,但如果slave重启后同步,此时slave重启后,slave节点和master节点的数据之间有落后,因此需要进行增量同步。
【过程】
master节点和slave节点中维护了一个环形数组(前文提到的repl_baklog)和一个指针为offset。
slave来申请增量同步,带着replid和offset,然后master根据获取offset之后的数据,将其发送给slave,slave进行同步。
- 此时会出现一个问题,当slave下限太久时,master中存储的数据已经超过了这个repl_baklog的上线,因此就需要重新进行全量同步。
通过对Redis主从集群的同步介绍,可以从以下几个方面来优化Redis的主从集群
- 在master中配置repl-diskless-sync yes 启用无磁盘负责,来避免全量同步时的磁盘IO。(应用场景:你的磁盘传输比较慢,但是你的网络带宽很大,网络状况极好。)
- Redis单节点上内存占用不要太大。减少RDB文件的大小。
- 适当的提高repl_baklog的大小,尽量slave恢复后做全量同步。
- 限制一个master上的slave节点数量,可以采用主从链的形式。
总结
到此这篇关于Redis全量同步和增量同步原理的文章就介绍到这了,更多相关Redis全量和增量同步内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
浅谈MySQL与redis缓存的同步方案
本文介绍MySQL与Redis缓存的同步的两种方案 方案1:通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现 方案2:解析MySQL的binlog实现,将数据库中的数据同步到Redis 一.方案1(UDF) 场景分析:当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,同步到Redis之后,查询的操作就从Redis中查找 过程大致如下: 在MySQL中对要操作的数据设置触发器Trigger,监听操作 客户端(NodeServer)向MySQL中写入数
-
Redis和数据库 数据同步问题的解决
缓存充当数据库 比如说Session这种访问非常频繁的数据,就适合采用这种方案:当然了,既然没有涉及到数据库,那么也就不会存在一致性问题: 缓存充当数据库热点缓存 读操作 目前的读操作有个固定的套路,如下: 客户端请求服务器的时候,发现如果服务器的缓存中存在,则直接取服务器的: 如果缓存中不存在,则去请求数据库,并且将数据库计算出来的数据回填给缓存: 返回数据给客户端: 写操作 各种情况会导致数据库和缓存出现不一致的情况,这就是缓存和数据库的双写一致性问题: 目前缓存存在三种策略,分别是 Cac
-
手把手教你用Redis 实现点赞功能并且与数据库同步
目录 一.Redis 缓存设计及实现 SpringBoot整合Redis 二.点赞数据在 Redis 中的存储格式 用 Redis 存储两种数据: 三.数据库设计 四.开启定时任务持久化存储到数据库 1. 添加依赖 2. 编写配置文件 3. 编写执行任务的类继承自 QuartzJobBean 五.注意事项 一.Redis 缓存设计及实现 Linux下安装Redis或者Docker下安装Redis并且启动(redis-server) SpringBoot整合Redis 1.在 pom.xml 中引
-
redis实现多级缓存同步方案详解
目录 前言 多级缓存数据同步 如何使用redis6客户端缓存 总结 前言 前阵子参加业务部门的技术方案评审,故事的背景是这样:业务部门上线一个专为公司高管使用的系统.这个系统技术架构形如下图 按理来说这个系统因为受众很小,可以说基本上没并发,业务也没很复杂,但就是这么一个系统,连续2次出现数据库宕机,而导致系统无法正常运行.因为这几次事故,业务部门负责人组织这次技术方案评审,主题如何避免再次出现类似这种故障? 当时有个比较资深的技术,他提出当数据库出现宕机时,可以切换到redis,redis里面
-
Redis主从同步配置的方法步骤(图文)
一丶主从概念 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1 通过主从配置可以实现读写分离 master和slave都是一个redis实例(redis服务) 二丶主从配置 说明:搭建redis主服务和从服务可以在同一台电脑上搭建,也可以在不同电脑上搭建,博主这里使用一台电脑进行搭建 1.配置主 step1 查看电脑中的ip地址 step2 编辑
-
redis-shake同步redis数据的实现方法
目录 前言 redis shake 简介 基本功能 基本原理 环境准备 一.安装redis 二.redis shake使用步骤 前言 和很多同步工具一样,redis shake为同步redis数据而存在.在很多场景下,如果不使用同步工具,如果需要同步redis数据是一件相对繁琐的事情,可能需要编写代码,专门来做同步这件事,这就对开发提出了较高的要求,需要考虑到各种场景, 有了redis shake 之后,同步redis数据库数据变得容易了很多,其实我们可以猜想,它应该利用了解析redis的rdb
-
Redis全量同步和增量同步原理
目录 全量同步 增量同步 总结 全量同步 主从第一次同步是全量同步:也就是说,当你主从节点连接建立后,需要执行一次全量同步.那么Redis如何实现全量同步呢? 其实本质就是Master 给 slave 发送其保存的RDB文件.slave读取RDB文件恢复数据 详细介绍: [第一步]slave与master建立连接后,master判断该slave 是否是第一次建立连接.那么该如何判断呢? 其实Master和slave都有一个Replication Id,简称replid,若id一致说明是已经建立过
-
mysql全量备份、增量备份实现方法
mysql全量备份.增量备份.开启mysql的logbin日志功能.在/etc/my.cnf文件中加入以下代码: [mysqld] log-bin = "/home/mysql/logbin.log" binlog-format = ROW log-bin-index = "/home/mysql/logindex" binlog_cache_size=32m max_binlog_cache_size=512m max_binlog_size=512m 重启mys
-
Redis全量复制与部分复制示例详解
Redis 主从复制 Redis 实例划分为主节点(master)和从节点(slave) 默认情况下,Redis都是主节点 每个从节点只能有一个主节点,而主节点可以同时具有多个从节点 复制的数据流是单向的,只能由主节点复制到从节点 slaveof 命令在使用时,可以运行期动态配置,也可以提前写到配置文件中 主从复制 步骤 详细描述 保存主节点信息 执行slaveof后从节点只保存主节点的地址信息便直接返回 主从建立socket连接 从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,
-
mongodb增量/全量备份脚本的实现详解
前言 mongodb备份脚本,可以全量或增量进行备份,两年前所写,目前网上mongodb备份相关的脚本也还是很少.下面话不多说了,来一起看看详细的介绍吧 功能 定期对mongodb数据库数据进行全量备份或增量备份(副本集架构),并可以压缩上传到阿里云oss(本地会先生成压缩包,可以设置不上传oss). 脚本运行环境 使用python语言编写,需安装python,pymongo和mongodb shell客户端(测试时使用python 2.7.6,pymongo 3.0.3和mongodb she
-
python实现MySQL指定表增量同步数据到clickhouse的脚本
python实现MySQL指定表增量同步数据到clickhouse,脚本如下: #!/usr/bin/env python3 # _*_ coding:utf8 _*_ from pymysqlreplication import BinLogStreamReader from pymysqlreplication.row_event import (DeleteRowsEvent,UpdateRowsEvent,WriteRowsEvent,) import clickhouse_driver
-
MySQL特定表全量、增量数据同步到消息队列-解决方案
目录 1.原始需求 2.解决方案 3.canal介绍.安装 canal的工作原理 架构 安装 4.验证 1.原始需求 既要同步原始全量数据,也要实时同步MySQL特定库的特定表增量数据,同时对应的修改.删除也要对应. 数据同步不能有侵入性:不能更改业务程序,并且不能对业务侧有太大性能压力. 应用场景:数据ETL同步.降低业务服务器压力. 2.解决方案 3.canal介绍.安装 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了M
-
Spring Boot整合阿里开源中间件Canal实现数据增量同步
目录 前言 Canal是什么? Canal数据如何传输? 数据同步还有其他中间件吗? Canal服务端安装 1.打开MySQL的binlog日志 2.设置MySQL的配置 3.设置RabbitMQ的配置 4.RabbitMQ新建exchange和Queue 5.启动服务端 6.测试 Canal客户端搭建 1.创建消息实体类 2.MQ消息监听业务 3.测试 总结 前言 数据同步一直是一个令人头疼的问题.在业务量小,场景不多,数据量不大的情况下我们可能会选择在项目中直接写一些定时任务手动处理数据,例
-
CentOS6.5环境下使用rsync增量同步备份文件的方法
本文实例讲述了CentOS6.5环境下使用rsync增量同步备份文件的方法.分享给大家供大家参考,具体如下: rsync是linux下一款文件同步工具,介绍如下: Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync本来是用以取代rcp的一个工具,它当前由 rsync.samba.org维护.Rsync使用所谓的"Rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.运行
-
java 实现增量同步和自定义同步的操作
场景 公司有多个系统. 需要从某个系统拿数据.初始化拿一次,然后每天增量同步. 因为逻辑关系有些复杂,且涉及到多表,所以纯sql不太方便. 项目之前的mybatis写死了, sysdate-1的数据. 如何全量同步 老办法 可以让某系统调整modifyDate,本系统通过定时任务同步这些数据. 缺点: 按规定不允许改数据,别人也不乐意改. 较好的办法 调整mybatis,传入参数变为自定义方法,这样就可以同步任意时刻的数据. 一般有2种方法: 传入游标方法: sysdate-n 直接传入日期字符
-
mysql备份策略的实现(全量备份+增量备份)
目录 设计场景 技术点 服务器信息 准备工作 编写全量备份脚本(Mysql-FullyBak.sh) 编写增量备份脚本 设置定时任务crontab 恢复操作 最近项目需要对数据库数据进行备份,通过查阅各种资料,设计了一套数据库备份策略,通过调试运行一周后,目前已经处于平稳运行状态.现在将思路分享出来,同时感谢gredn大佬. 设计场景 1)增量备份在周一到周六凌晨3点,复制mysql-bin.00000*到指定目录: 2)全量备份则使用mysqldump将整个数据库导出,每周日凌晨3点执行,并会
随机推荐
- pyqt4教程之messagebox使用示例分享
- JavaScript实现表格快速变色效果代码
- JavaScript时间操作之年月日星期级联操作
- PHP+MYSQL实现用户的增删改查
- php生成扇形比例图实例
- php用正则表达式匹配URL的简单方法
- C#(asp.net)多线程用法示例(可用于同时处理多个任务)
- 在Centos7中安装Docker1.12的详细教程
- javascript中call apply 的应用场景
- 空间页面CSS说明
- JavaScript通过字符串调用函数的实现方法
- C#利用控件拖拽技术制作拼图游戏
- 微信小程序中button组件的边框设置的实例详解
- SQLServer 优化SQL语句 in 和not in的替代方案
- 经典海量jQuery插件 大家可以收藏一下
- jquery特效 点击展示与隐藏全文
- JavaScript中的toUTCString()方法使用详解
- 如何设置Tomcat的默认端口(图文)
- java组件SmartUpload和FileUpload实现文件上传功能
- mysql installer web community 5.7.21.0.msi安装图文教程