我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL与redis缓存怎么实现同步

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL与redis缓存怎么实现同步

MySQLredis缓存怎么实现同步?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、方案1(UDF)

场景分析:当我们对MySQL数据库进行数据操作时,同时将相应的数据同步到Redis中,同步到Redis之后,查询的操作就从Redis中查找

过程大致如下:

在MySQL中对要操作的数据设置触发器Trigger,监听操作

客户端(NodeServer)向MySQL中写入数据时,触发器会被触发,触发之后调用MySQL的UDF函数

UDF函数可以把数据写入到Redis中,从而达到同步的效果

MySQL与redis缓存怎么实现同步

方案分析:

  • 这种方案适合于读多写少,并且不存并发写的场景

  • 因为MySQL触发器本身就会造成效率的降低,如果一个表经常被操作,这种方案显示是不合适的

演示案例

下面是MySQL的表

MySQL与redis缓存怎么实现同步

下面是UDF的解析代码

MySQL与redis缓存怎么实现同步

定义对应的触发器

MySQL与redis缓存怎么实现同步

MySQL与redis缓存怎么实现同步

MySQL与redis缓存怎么实现同步

二、方案2(解析binlog)

在介绍方案2之前我们先来介绍一下MySQL复制的原理,如下图所示:

  • 服务器操作数据,并将数据写入Bin log

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

MySQL与redis缓存怎么实现同步

方案2就是:

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

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

MySQL与redis缓存怎么实现同步

例如下面是一个云数据库实例分析:

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

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

MySQL与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流)

MySQL与redis缓存怎么实现同步

架构:

server代表一个canal运行实例,对应于一个jvm

instance对应于一个数据队列 (1个server对应1..n个instance)

instance模块:

  •  eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)

  • eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)

  • eventStore (数据存储)

  • metaManager (增量订阅&消费信息管理器)

MySQL与redis缓存怎么实现同步

大致的解析过程如下:

  • parse解析MySQL的Bin log,然后将数据放入到sink中

  • sink对数据进行过滤,加工,分发

  • store从sink中读取解析好的数据存储起来

  • 然后自己用设计代码将store中的数据同步写入Redis中就可以了

  • 其中parse/sink是框架封装好的,我们做的是store的数据读取那一步

MySQL与redis缓存怎么实现同步

更多关于Cancl可以百度搜索

下面是运行拓扑图

MySQL与redis缓存怎么实现同步

MySQL表的同步,采用责任链模式,每张表对应一个Filter。例如zvsync中要用到的类设计如下:

MySQL与redis缓存怎么实现同步

下面是具体化的zvsync中要用到的类,每当新增或者删除表时,直接进行增删就可以了

MySQL与redis缓存怎么实现同步

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL与redis缓存怎么实现同步

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL与redis缓存怎么实现同步

MySQL与redis缓存怎么实现同步?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方案1(UDF)场景分析:当我们对MySQL数据库进行数据操作时,同时将
2023-06-14

MySQL数据怎么同步到Redis缓存

这篇“MySQL数据怎么同步到Redis缓存”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL数据怎么同步到Redis
2023-07-05

redis实现多级缓存同步方案详解

目录前言多级缓存数据同步如何使用Redis6客户端缓存总结前言前阵子参加业务部门的技术方案评审,故事的背景是这样:业务部门上线一个专为公司高管使用的系统。这个系统技术架构形如下图按理来说这个系统因为受众很小,可以说基本上没并发,业务也没很
2022-12-21

redis缓存原理与实现

redis 缓存是一种内存中键值对存储,通过将常用数据存储在内存中,提升应用程序性能。其实现原理包括哈希表、跳跃表、异步 i/o、内存映射、复制和持久化等技术,带来提高性能、减少延迟、提升吞吐量和降低成本等好处。Redis缓存原理Redi
redis缓存原理与实现
2024-04-19

php怎么实现redis缓存

PHP中的Redis缓存在PHP中使用Redis缓存可显著提升性能。本指南介绍如何使用Predis客户端库一步步连接到Redis服务器、设置缓存值、获取缓存值、删除缓存值、设置缓存过期时间、实现缓存锁定,以及利用Redis的哈希表、发布/订阅功能。通过遵循本指南,开发人员可以轻松地将Redis集成到他们的PHP应用程序中,从而提高性能和可伸缩性。
php怎么实现redis缓存
2024-04-10

Redis分布式缓存与秒杀怎么实现

本篇内容介绍了“Redis分布式缓存与秒杀怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、单点Redis的问题1、数据丢失问题Re
2023-07-05

redis怎么实现数据同步

Redis可以通过以下几种方式实现数据同步:1. 主从复制:Redis支持主从复制,即将一台Redis服务器作为主服务器,其他Redis服务器作为从服务器。主服务器将更新操作写入日志,并将日志发送给从服务器进行同步。从服务器接收并执行日志,
2023-08-23

多台redis怎么实现同步

要实现多台 Redis 之间的同步,可以有以下几种方法:1. 主从复制:在 Redis 中,可以通过配置主从复制来实现数据同步。设置一个 Redis 实例为主服务器(Master),其他 Redis 实例为从服务器(Slave),主服务器将
2023-09-11

编程热搜

目录