canal,根据官方的解释,也就是用于同步数据库的增量数据到其他的存储应用
作用:
不需要在修改数据库的数据后自己手动进行redis中的数据进行同步操作
可以通过将数据库的数据同步到其他的存储应用,达到提高性能的作用
如:将本需要访问mysql的数据,同步修改到redis中,让更多的访问直接访问到redis,减少访问mysql数据库,从而达到提高性能的作用。
原理:
MySQL有主从机制(读写分离,需要开启bin-log模式,主节点会把写操作记录到一个文件,后续会把数据库同步到从节点),canal则伪装成从节点,从主节点获取到一份写操作记录,然后再进行同步到其他地方(redis,es,mongoDB等)
需要去官网下载canal并安装
1、canal的start依赖
<dependency>
<groupId>top.javatool</groupId>
<artifactId>canal-spring-boot-starter</artifactId>
<version>1.2.1-RELEASE</version>
</dependency>
2、配置
canal:
server: Canal服务部署的地址:11111
destination: example
logging:
level:
root: info
top:
javatool:
canal:
client:
client:
AbstractCanalClient: error
3、添加Handler
@Slf4j
@Component
@CanalTable(value = "表名")
public class OrderaInfoHandler implements EntryHandler<T> {//T为自定义接收封装的类型
@Override
public void insert(T t) {
log.info("当有数据插入的时候会触发这个方法);
}
@Override
public void update(T before, T after) {
log.info("当有数据更新的时候会触发这个方法);
}
@Override
public void delete(T t) {
log.info("当有数据删除的时候会触发这个方法);
}
}
4、对应的接收数据的类,需要用@Table(name="表名")指定表名,以及@Column(name="列名")指定属性对应的列名。
注意:接收的类型不能是基本数据类型。