前言
在很多业务情况下,我们都会在系统中加入redis缓存做查询优化。
如果数据库数据发生更新,这时候就需要在业务代码中写一段同步更新redis的代码。
这种数据同步的代码跟业务代码糅合在一起会不太优雅,能不能把这些数据同步的代码抽出来形成一个独立的模块呢,答案是可以的。
架构图
canal是一个伪装成slave订阅mysql的binlog,实现数据同步的中间件。上一篇文章《canal入门》
我已经介绍了最简单的使用方法,也就是tcp模式。
实际上canal是支持直接发送到MQ的,目前最新版是支持主流的三种MQ:Kafka、RocketMQ、RabbitMQ。而canal的RabbitMQ模式目前是有一定的bug,所以一般使用Kafka或者RocketMQ。
https://blog.roncoo.com/article/1295909309436481537
![](http://tiebapic.baidu.com/forum/w%3D580/sign=be94ce900d4c510faec4e21250582528/99ddc32dd42a28340d4b26534cb5c9ea14cebf7a.jpg?tbpicau=2025-02-17-05_78f84b57244c26cd21675c87cd8fa09d)
在很多业务情况下,我们都会在系统中加入redis缓存做查询优化。
如果数据库数据发生更新,这时候就需要在业务代码中写一段同步更新redis的代码。
这种数据同步的代码跟业务代码糅合在一起会不太优雅,能不能把这些数据同步的代码抽出来形成一个独立的模块呢,答案是可以的。
架构图
canal是一个伪装成slave订阅mysql的binlog,实现数据同步的中间件。上一篇文章《canal入门》
我已经介绍了最简单的使用方法,也就是tcp模式。
实际上canal是支持直接发送到MQ的,目前最新版是支持主流的三种MQ:Kafka、RocketMQ、RabbitMQ。而canal的RabbitMQ模式目前是有一定的bug,所以一般使用Kafka或者RocketMQ。
https://blog.roncoo.com/article/1295909309436481537
![](http://tiebapic.baidu.com/forum/w%3D580/sign=be94ce900d4c510faec4e21250582528/99ddc32dd42a28340d4b26534cb5c9ea14cebf7a.jpg?tbpicau=2025-02-17-05_78f84b57244c26cd21675c87cd8fa09d)