1. canal
Canal,阿里巴巴 MySQL binlog 增量订阅&消费组件,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
首先了解一下mysql主备复制原理:
(1)master主库将改变记录,发送到二进制文件(binary log)中
(2)slave从库向mysql Master发送dump协议,将master主库的binary log events拷贝到它的中继日志(relay log)
(3)slave从库读取并重做中继日志中的事件,将改变的数据同步到自己的数据库
Canal 工作原理:
- canal 模拟 mysql slave 的交互协议,伪装自己为 mysql slave,向 mysql master 发送 dump 协议
- mysql master 收到 dump 请求,开始推送 binary log 给 slave(也就是 canal)
- canal 解析 binary log对象(原始为 byte 流)
Canal 包含两个组成部分:服务端和客户端。服务端负责连接至不同的 MySQL 实例,并为每个实例维护一个事件消息队列;客户端则可以订阅这些队列中的数据变更事件,处理并存储到数据仓库中。
2. canal安装
使用Canal实现redis和mysql的同步
Canal 详解 Mysql与Redis数据同步 解决方案
3. 客户端代码
Canal 实现Mysql Redis数据同步
如此以来即可实现:mysql的数据类实时同步至redis
当然,redis的数据也可以同步至mysql – 在写入redis时也可以异步去更新mysql的数据
通常是 读redis写mysql
所以在首先读取redis数据时若发现没有对应的key,则可以再到mysql中读取;
在首先写入mysql时可以使用以上方案同步至redis;