本文介绍MySQL与Redis缓存的同步的两种方案
下面是MySQL的表
下面是UDF的解析代码
定义对应的触发器
在介绍方案2之前我们先来介绍一下MySQL复制的原理,如下图所示:
方案2就是:
例如下面是一个云数据库实例分析:
这个技术方案的难点就在于:如何解析MySQL的Bin Log。但是这需要对binlog文件以及MySQL有非常深入的理解,同时由于binlog存在Statement/Row/Mixedlevel多种形式,分析binlog实现同步的工作量是非常大的
canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)
开源参考地址有:https://github.com/liukelin/canal_mysql_nosql_sync
架构:
大致的解析过程如下:
更多关于Cancl可以百度搜索
下面是运行拓扑图
MySQL表的同步,采用责任链模式,每张表对应一个Filter。例如zvsync中要用到的类设计如下:
下面是具体化的zvsync中要用到的类, 每当新增或者删除表时,直接进行增删就可以了
本文上面所介绍的都是从MySQL中同步到缓存中。但是在实际开发中可能有人会用下面的方案:客户端有数据来了之后,先将其保存到Redis中,然后再同步到MySQL中 这种方案本身也是不安全/不可靠的,因此如果Redis存在短暂的宕机或失效,那么会丢失数据
作者 | 江南、董少 来源 | https://dongshao.blog.csdn.net/article/details/107190925