通过本文章,可以完成多级缓存架构中的缓存同步。
一、Canal服务
1. mysql添加canal用户
连接在上一次multiCache项目中运行的mysql容器,创建canal用户。
1 | CREATE USER canal IDENTIFIED BY 'canal'; |
2. mysql配置文件
在docker/mysql/conf/my.cnf添加如下配置
1 | server-id=1000 |
3. canal配置文件
添加canal服务块到docker-compose.yml,如下
1 | canal: |
1 | docker pull canal/canal-server:v1.1.7 |
任意启动一个canal-server容器,将里面的/home/admin/canal-server/conf文件夹复制到宿主机,对应docker/canal/conf文件夹。
删除此临时容器。
修改docker/canal/conf/canal.properties如下条目
1 | canal.destinations=example |
修改docker/canal/conf/example/instance.properties如下条目
1 | canal.instance.master.address=172.30.3.2:3306 |
二、引入依赖
pom.xml
1 | <dependency> |
application.yml
1 | canal: |
三、监听Canal消息
这是canal-spring-boot-starter官方仓库,含使用文档
新建canal.ItemHandler类,内容如下
1 | package com.heima.item.canal; |
修改pojo.Item类,如下
1 | package com.heima.item.pojo; |
四、运行
到此为止,docker-compose.yml内容应该如下
1 | version: '3.8' |
删除原来的multiCache,重新启动各项服务。
1 | docker-compose -p multi-cache up -d |
启动springboot程序。
五、测试
springboot不断输入类似如下日志,属于正常监听canal消息中。
1 | 09:27:17:175 INFO 1 --- [l-client-thread] t.j.c.client.client.AbstractCanalClient : 获取消息 Message[id=-1,entries=[],raw=false,rawEntries=[]] |
访问http://localhost:8081/item/10001,此时信息为tomcat查询数据库所得数据,而后存入Caffeine缓存。
访问http://localhost:8080/item.html?id=10001,此时信息为Redis缓存数据。
然后,
访问http://localhost:8081/来到商品管理页面。
修改id=10001的数据的商品分类
确认后
springboot日志出现类似如下日志
1 | 09:31:29:234 INFO 1 --- [l-client-thread] t.j.c.client.client.AbstractCanalClient : 获取消息 Message[id=1,entries=[header { |
这里可以先用redis连接工具查询数据,发现rediis已被更新。
再次访问http://localhost:8081/item/10001直接向springboot的controller发送请求,发现caffeine数据更新,并且springboot日志没有出现查询记录,说明走的是caffeine。









