如何使用canal解决mysql与redis数据一致性问题?

问题;如果数据库数据发生了变化,如何将变化的数据同步给redis?

1.直接删除redis缓存,见代码

2.基于MQ形式实现同步(略)

3.基于canal订阅binlog二进制文件,通过mq实现异步同步

基于canal订阅binlog同步

在这里插入图片描述

原理:

1.canal服务器伪装成mysql的从节点,订阅mysql 的binlog二进制文件

2.当mysql主节点binlog发生改变时,会通知给canal服务器端

3.canal服务器将改变的数据转换成json数据发送canal客户端

4.在canal客户端中,将数据异步的写入到redis中

环境搭建

1.配置mysql,开启binlog主从同步

#1.查询mysql安装目录
select @@datadir;

#2.然后在my.cnf文件添加以下配置,并重启服务器
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式 
server_id=1

#3.查询是否开启binlog
show variables like 'log_bin';

#4.添加用户并赋予权限(略)

2.配置canal服务端(此处为了方便使用docker安装)

docker pull canal/canal-server:latest
docker run -p 11111:11111 --name canal -id canal/canal-server
docker exec -it canal /bin/bash
# 修改canal.id=2  不能与之前的mysql配置id相同
vi /home/admin/canal-server/conf/canal.properties

在这里插入图片描述

#修改mysql主节点地址
vi /home/admin/canal-server/conf/example/instance.properties

在这里插入图片描述

3.测试代码
github地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值