MySQL与Redis缓存的同步方案 -- binlog

Linux服务器开发架构师进阶之路:MySQL与redis缓存的同步方案 本文介绍MySQL与Redis缓存的同步的两种方案 方案1:通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现方案 2:解析MySQL的binlog实现,将数据库中的数据同步到Redis 一、方案1(UDF) 场景分析:当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,同步到Redis之后,查询的操作就从Redis中查找 过程大致如下: 在MySQL中对要操作的数据设置触发器Trigger,监听操作 客户端(NodeServer)向MySQL中. 阅读详情

MySQL与Redis缓存的同步的两种方案

  1. 通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现
  2. 解析MySQL的binlog实现,将数据库中的数据同步到Redis

MySQL复制的原理
在这里插入图片描述

  • 主服务器操作数据,并将数据写入Bin log
  • 从服务器调用I/O线程读取主服务器的Bin log,并且写入到自己的Relay log中,再调用SQL线程从Relay log中解析数据,从而同步到自己的数据库中

解析binlog

  • 上面MySQL的整个复制流程可以总结为一句话,那就是:从服务器读取主服务器Bin log中的数据,从而同步到自己的数据库中

  • 我们方案2也是如此,就是在概念上把主服务器改为MySQL,把从服务器改为Redis而已(如下图所示),当MySQL中有数据写入时,我们就解析MySQL的Bin log,然后将解析出来的数据写入到Redis中,从而达到同步的效果

  • 在这里插入图片描述
    例如下面是一个云数据库实例分析:

  • 云数据库与本地数据库是主从关系。云数据库作为主数据库主要提供写,本地数据库作为从数据库从主数据库中读取数据

  • 本地数据库读取到数据之后,解析Bin log,然后将数据写入同步到Redis中,然后客户端从Redis读数据

在这里插入图片描述
这个技术方案的难点就在于: 如何解析MySQL的Bin Log。但是这需要对binlog文件以及MySQL有非常深入的理解,同时由于binlog存在Statement/Row/Mixedlevel多种形式,分析binlog实现同步的工作量是非常大的

Canal开源技术

canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)

开源参考地址有:https://github.com/liukelin/canal_mysql_nosql_sync

工作原理(模仿MySQL复制):

  • canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  • mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  • canal解析binary log对象(原始为byte流)

在这里插入图片描述
架构:

  1. server代表一个canal运行实例,对应于一个jvm
  2. instance对应于一个数据队列 1个server对应1…n个instance)
  3. instance模块:
    1. eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
    2. eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)
    3. eventStore (数据存储)
    4. metaManager (增量订阅&消费信息管理器)

在这里插入图片描述
大致的解析过程如下:

parse解析MySQL的Bin log,然后将数据放入到sink中
sink对数据进行过滤,加工,分发
store从sink中读取解析好的数据存储起来
然后自己用设计代码将store中的数据同步写入Redis中就可以了
其中parse/sink是框架封装好的,我们做的是store的数据读取那一步

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

附加

本文上面所介绍的都是从MySQL中同步到缓存中。但是在实际开发中可能有人会用下面的方案:

  • 客户端有数据来了之后,先将其保存到Redis中,然后再同步到MySQL中
    这种方案本身也是不安全/不可靠的,因此如果Redis存在短暂的宕机或失效,那么会丢失数据本文上面所介绍的都是从MySQL中同步到缓存中。但是在实际开发中可能有人会用下面的方案:

  • 客户端有数据来了之后,先将其保存到Redis中,然后再同步到MySQL中
    这种方案本身也是不安全/不可靠的,因此如果Redis存在短暂的宕机或失效,那么会丢失数据
    在这里插入图片描述

西门子博图指令(定时器操作三) 西门子博图定时器中复位定时器功能指令介绍 阅读详情

相关推荐

kbjdbc: autodetected server-encoding to be ISO-8859-1, if the message is not readable, please check

这条信息是来自 KingbaseES 数据库的一个 JDBC 客户端连接提示。KingbaseES 是一个企业级的关系型数据库管理系统,它兼容 PostgreSQL 的许多特性。如果上述步骤仍然无法解决问题,建议详细查看数据库和客户端的日志文件,以获取更具体的错误信息。此外,也可以考虑联系 KingbaseES 的技术支持获取帮助。项目融合kingbase数据库,输出日志乱码。结果:网上各种调整各种试。

zjy660358的专栏 4844

Mysql通过binlog同步redis

实现过程 通过canal解析binlog,canal主要模拟了mysql的Slave向Master发送请求,当mysql有增删改查时则会出发请求将数据发送到canal服务中,canal将数据存放到内存,直到客户端程序(canal服务端和客户端程序都是由java编写,且客户端逻辑由我们借助com.alibaba.otter.canal工具包下的类完成开发)通过发布-订阅这种模式消费canal服务中...

u010743397的博客 5260

如何搭建一个vue项目(完整步骤)

查看版本的两种方式 出现版本号则说明安装成功(最新的以官网为准) 这里注意:安装vue-cli对node.js的版本是有要求的 装的两种方式:输入cmd命令 查看安装的版本(显示版本号说明安装成功) 如果你原来有版本或者版本比较低,可以升级...

m0_67392661的博客 5585

基于binlog+Canal+Redis保姆级教程,帮助您实现数据一致性落地的全过程!

canal 是阿里巴巴的一个开源项目,基于java实现,整体已经在很多大型的互联网项目生产环境中使用,包括阿里、美团等都有广泛的应用, 是一个非常成熟的数据库同步方案,基础的使用只需要进行简单的配置即可。canal是通过模拟成为mysql 的slave的方式, 监听mysql 的binlog日志来获取数据,binlog设置为row模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,canal就能高性能的获取到mysql数据数据的变更。

竹林幽深 4588

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。

2401_84610415的博客 1804

Proteus+汇编+8086电子时钟实战:从框架搭建到中断驱动的核心实现

本文详细介绍了使用Proteus仿真软件和8086汇编语言实现电子时钟的完整过程。从程序框架搭建、内存分段模型理解,到核心的8259中断控制器配置与编程,再到中断服务程序编写和数码管动态扫描显示驱动,系统阐述了底层软硬件协同开发的核心原理与实战步骤。该项目是深入理解计算机中断机制和汇编语言编程的绝佳实践。

weixin_29189381的博客 413

mysql redis binlog_Mysql通过binlog同步redis

实现过程通过canal解析binlog,canal主要模拟了mysql的Slave向Master发送请求,当mysql有增删改查时则会出发请求将数据发送到canal服务中,canal将数据存放到内存,直到客户端程序(canal服务端和客户端程序都是由java编写,且客户端逻辑由我们借助com.alibaba.otter.canal工具包下的类完成开发)通过发布-订阅这种模式消费canal服务中的数...

weixin_39575212的博客 527

使用Python,OpenCV查找图像中的最亮点

这篇博客展示了,为什么在图像中找到最亮的点之前应用高斯模糊是至关重要的。 通过应用高斯模糊,可以将每个给定半径内的像素平均在一起。取平均值可以去除高频噪声,否则会影响cv2.minMaxLoc函数的结果。 一定要研究高斯模糊半径的恰当值。如果取值太小,将会减轻平均值的影响,而忽略了更大、更亮的区域。但是如果半径太大,将无法探测到小的明亮区域。

qq_40985985的博客 3809

Redis和MySQL数据一致性方案

一、需求起因 高并发业务场景,数据库通常都是用户并发访问最薄弱的环节。所以,就需要使用 Redis 做一个缓冲操作,让请求先访问到 Redis,而不是直接访问 MySQL 等数据库。 从 Redis 读数据,一般都是按照下图的流程来进行业务操作: 读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MySQL)间的数据一致性问题。不管是先写数据库,再删除缓存;还是先删除缓存,再写数据库,都有可能出现数据不一致的情况。比如: 如果删除了缓存,还没有来

ChineseSoftware的博客 1049

【AI 编程工具】Codex配置部署指南

目录一、环境准备与基础安装1. 系统兼容性检查2. 前置依赖安装3. 安装方式选择二、API密钥配置与认证1. 获取API密钥2. 配置文件设置3. 临时配置方式三、沙盒环境配置与安全策略1. 沙盒模式选择2. 安全最佳实践四、高级功能配置1. 模型上下文协议(MCP)配置2. 模型版本切换3. 自定义网关配置五、常见问题排查1. 安装失败2. API调用失败3. 处理速度慢4. 配置文件不生效六、生产环境部署建议macOS/Linux:官方提供稳定支持,推荐使用原生环境Windows:官方标注为实验性支持

以实战经验介绍行业知识 2894

Doris磁盘空间管理(生命周期管理、清理磁盘空间方法)

在进行数据仓库开发时,比较头疼的是历史数据不删除,磁盘空间不断增长,如果磁盘空间不足时,spark调度任务写入时就会报错。

大模型大数据攻城狮的专栏 1718

mysql redis binlog_Mysql-binlog

如何保证redis和mysql数据一致 ?Mysql -- binlogmysql-binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句((除了数据查询语句)信息。可以使用mysqlbin命令查看二进制日志的内容。MySQL binlog格式binlog的格式也有三种:STATEMENT、ROW、MIXED 。1、STATMENT模式:基于SQL语句的复制(statem...

weixin_28888459的博客 640

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MySQL到Redis缓存同步最佳实践:基于Canal的binlog订阅方案

在互联网高并发场景下,应用系统普遍采用MySQL作为核心数据库、Redis作为缓存层来提升读性能。然而,数据库更新后如何保持缓存的一致性,是开发团队长期面临的难题。基于binlog的增量数据订阅技术,能够在不侵入业务代码的前提下,实时捕获MySQL的数据变更。Canal作为主流的数据同步中间件,模拟MySQL从库协议解析binlog,将数据变更可靠地推送至消费端,进而实现MySQL到Redis的自动缓存更新。该方案具备低延迟、高可靠性、易扩展等优势,特别适用于订单、商品等核心业务的大流量缓存场景。本文从架构

weixin_30522983的博客 203

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

binlog流程 mysql_Linux服务器开发架构师进阶之路:MySQL与redis缓存的同步方案

上文:c/c++,go语言Linux服务器开发高级架构师进阶之路之前给大家分享了一篇架构师进阶之路的文章以及视频分享,今天给大家分享的文章即Linux服务器开发架构师知识点解析,希望可以帮助到大家。另大家有需要c/c++ ,go Linux服务器开发高级架构师学习视频资料的可以后台私信【架构】获取本文介绍MySQL与Redis缓存的同步的两种方案方案1:通过MySQL自动同步刷新Redis,MyS...

weixin_30453651的博客 173

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Redis与MySQL缓存一致性方案解析:从旁路缓存到binlog同步

在分布式系统架构中,缓存与数据库的数据一致性是后端开发永恒的话题。Redis凭借高性能成为缓存层首选,但MySQL与Redis之间缺乏跨组件事务保证,导致更新顺序或读写并发下容易出现缓存与数据库不一致。理解最终一致性而非强一致性,是设计缓存策略的前提。业内常见的解决方案包括Cache Aside旁路缓存、延迟双删、订阅binlog异步同步以及分布式锁串行化读写,它们各有适用场景与权衡。Cache Aside简单易用,但存在并发竞态;延迟双删通过时间窗口弥补;binlog同步彻底解耦业务;锁方案则牺牲性能换取

weixin_30431445的博客 266

Canal监听MySQL Binlog同步Redis缓存,返利系统一致性方案实践

在电商与返利类系统中,高频查询与低频写事务并存,缓存一旦与数据库脱节,用户看到的待入账金额就可能失真。数据库Binlog作为MySQL对外发布的数据变更公告,记录了完整的行级变更镜像,是构建“DB→Cache”可靠同步的关键基础。基于Canal伪装成从库解析Binlog,结合消息队列与具备版本判断的Redis条件更新,能够在订单状态流转、佣金入账等读多写少场景下实现增量缓存同步,再配合定时对账任务兜底一致性。这类技术方案不仅适用于返利系统,也是交易、钱包、佣金等数据敏感业务通用的缓存一致性实践。内容从增量同

weixin_29611239的博客 305

基于Canal解析Binlog实现MySQL与Redis缓存同步的实战方案

在高并发业务中,数据库热点数据的读取压力往往需要通过引入Redis缓存来缓解,但缓存与数据库之间的数据一致性却成为新的挑战。传统手动双写、消息通知等策略存在代码侵入性强、同步窗口不可控等痛点。通过解析MySQL的Binlog日志,可以在不侵入业务代码的前提下,实现从数据库到缓存的准实时同步。Canal作为核心中间件,模拟MySQL从库协议获取增量变更,再经由适配器将数据写入Redis,形成一条独立、可靠的数据管道。本文从缓存一致性概念出发,讲解Canal的架构原理与配置落地,覆盖环境部署、同步规则映射、全量

weixin_30074763的博客 246

MySQL与Redis数据同步实战:基于binlog的缓存一致性方案

在Web后端架构中,MySQL与Redis常常组成存储加缓存的黄金组合,但两者之间的数据同步一直是个高频难点。缓存一致性问题的本质,并不只是某段代码逻辑写错,而是数据库变更缺少独立于业务应用的可靠传播通道。Cache Aside、延迟双删等应用层策略虽然经典,却容易受并发窗口、漏删除和主从复制延迟影响,最终只能靠手工清缓存救火。基于binlog的数据同步方案则从源头解决这一问题:通过解析MySQL二进制日志,按事务提交顺序感知真实的数据变更,再经消息队列驱动缓存更新,让Redis与MySQL在最终一致性模型

weixin_32247165的博客 133

MySQL 与 Redis 缓存的同步方案

点击下方“IT牧场”,选择“设为星标”来源:dongshao.blog.youkuaiyun.com/article/details/107190925本文介绍MySQL与Redis缓存的同步的两种方...

ITMuch的专栏 489

MySQL与Redis缓存的同步方案

点击上方蓝色“方志朋”,选择“设为星标” 回复“666”获取独家整理的学习资料! 来源:dongshao.blog.youkuaiyun.com/article/details/107190925...

方志朋的博客 105

redis监听写入mysql_监听Mysql binlog日志并实时将变更同步至缓存(redis)

binlog2cache监听Mysql binlog日志并实时将变更同步至缓存(redis)为什么需要binlog2cache存储在mysql中并且在redis中缓存的数据是易变的,这回引起脏数据。因此应该实时将数据库中最新的数据通过binlog2cache同步至redis缓存使用方式clone项目并安装依赖git clone https://github.com/jiangyx3915/binl...

weixin_35725310的博客 1580
上一篇: 字符串拼接还在用StringBuilder?快试试Java8中的StringJoiner吧,真香!
下一篇: MySQL-binlog数据恢复
W_Think
博客等级 码龄7年 3022粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值