首页 > 数据库 >SpringBoot整合Canal进行数据库 缓存同步

SpringBoot整合Canal进行数据库 缓存同步

时间:2024-03-31 17:14:15浏览次数:36  
标签:Canal canal 缓存 SpringBoot 数据库 user mysql

Canal 是阿里巴巴开源的一款基于 MySQL 数据库的增量日志订阅和解析工具,主要用于实现数据的实时同步和流处理。

通过使用 Canal,应用程序可以实现对数据库变更的监听,并将变更的数据实时同步到其他系统,比如消息队列、缓存系统等。

 

先记一下缓存雪崩的问题,

缓存雪崩是指在我们的系统中,大量的缓存数据在同一时间内失效,导致大量的请求直接打到数据库上,从而引发数据库压力过大甚至宕机。

Canal 可以帮助实现数据库和缓存的实时同步,减少缓存失效对数据库的冲击。但是,要彻底解决缓存雪崩问题,还需要结合其他策略,例如设置不同的缓存过期时间、使用熔断限流机制、引入分布式锁等。

 

下面开搞Canal,现在大部分用的springboot写项目,这里记录的用springboot集成的canal依赖,

通用的那个依赖包试了一下,没配置的太麻烦了,用法也不一样,日了小狗,所以还是用集成包,少整点配置

 

这里前提:

你的springboot已经引入了mysql数据库依赖,我这里用的持久层是mybatisPlus。这部分就不记录了

 

1.安装

  1.1装Canal

下载地址:alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 (github.com)  

我安装的是1.1.4版本,安装好解压 运行start脚本启动一下就行

 

  1.2 依赖

<dependency>
    <groupId>top.javatool</groupId>
    <artifactId>canal-spring-boot-starter</artifactId>
    <version>1.2.1-RELEASE</version>
</dependency>

 

  1.3 写下配置

application.yml里面,加上cancal的配置,

我只填写这两个,因为很多配置是默认的,安装好后canal我没动任何配置,所以如果单独自己修改了canal的某个配置,那么这里就要自己去加上修改的东西

canal:
  server: 127.0.0.1:11111 # Canal服务器地址和端口
  destination: example # Canal目的地名称

  记得连接mysql数据库的其它配置自己加上去,我这里就不写了

 

  1.4 mysql数据库给权限

 是的,mysql数据库还要给一下权限才可以让canal接入进来,读取mysql数据库的binlog,才可以捕获到增删改事件。

mysql中直接执行一下:

create user canal@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

解释:

  1. CREATE USER canal@'%' IDENTIFIED BY 'canal';:创建一个新用户canal,并设置密码为canal'%'表示该用户可以从任何主机连接到MySQL服务器。

  2. GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON *.* TO 'canal'@'%';:给canal用户授予一系列权限,包括:

    • SELECT:允许用户查询数据库。
    • REPLICATION SLAVE:允许用户请求从服务器的binlog。
    • REPLICATION CLIENT:允许用户查询二进制日志文件的位置。
    • SUPER:允许用户执行一些超级用户级别的操作,例如获取当前binlog文件的名称和位置。
  3. FLUSH PRIVILEGES;:刷新权限,使更改立即生效。

 

2.实战

  2.1 创建实体类

  和数据库的  user用户表字段 对应上

  写好表名

@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name ="user")
public class User {

    @TableId(type = IdType.AUTO)
    @Id
    private Integer id;

   private String name;

   private String password;

}

 

  2.2 创建监控器

@Component
@CanalTable(value = "user")
public class UserCanalListener  implements EntryHandler<User> {

    @Override
    public void insert(User user) {
        System.out.println("新增了一条数据:" + user);
    }

    @Override
    public void update(User before, User after) {
        System.out.println("数据修改前:" + before);
        System.out.println("数据修改后:" + after);
    }

    @Override
    public void delete(User user) {
//        EntryHandler.super.delete(user);
        System.out.println("删除用户user = " + user);
    }

}

 

实现 EntryHandler<实体类>即可,

这里的insert 对应的就是插入数据的操作,我这里 触发插入的操作后,就把 插入的数据打印出来

后面的 update就是更新,delete就是删除。

手动在数据库改一下数据,canal就会监控到事件,执行你的代码,可以触发后修改redis数据库,进行数据和缓存的同步。  也可以自己写其他逻辑,同步其它数据库

 

 

3.其它

有人问为什么控制台一直打印:获取消息 : xxxx[id:1] ....

这个是canal在不断的轮询监控,包的位置是这个:top.javatool.canal.client.client.AbstractCanalClient

这个类下面的方法process()会不断执行

this.log.info("获取消息 {}", message);

如果不想在控制台一直看到它输出,可以在application.yml里面改一下

logging:
  level:
    root: WARN
    # 针对特定包或类的日志级别设置
    t.j.c.client.client: ERROR
    # 或者如果你想要关闭所有DEBUG级别的日志,包括root
    DEBUG: OFF

针对这个包,改一下输出级别就行。

 

 

4.总结

ok。没总结,很简单,这样就结束了。

 

标签:Canal,canal,缓存,SpringBoot,数据库,user,mysql
From: https://www.cnblogs.com/Hello233/p/18106937

相关文章

  • 基于Springboot框架高校学校自习室教室座位预约系统设计与实现(安装部署+源码+文档)
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 9.折磨了一周的springboot样式跳转
    大致是这样的springboot一个项目将头部和侧部公共部分都提取出来但是一点击员工怎么侧边样式一直失败我看F12报错说的什么cavas渲染加上了还是错啊因为我是侧边栏的问题我的Controller跳转肯定没错这个真是让我难受了一周多因为还差增删改查就设计完毕了这个坑一......
  • 清理 Conda 缓存和 Pip 缓存
    清理Conda缓存:查看Conda缓存的使用情况:condaclean--dry-run--all删除不再使用的包和缓存:condaclean--all清理Pip缓存在使用pip安装Python库时,如果之前已经下载过该库,pip会默认使用缓存来安装库,而不是重新从网络上下载。缓存文件通常存储在用户目录下的缓......
  • Springboot整合Mybatis
    整合生产者默认如果在windows安装了rabbitmq是不用配置信息的,因为存在默认的配置整合流程:导包----------编写配置-----------写代码在springboot中存在很多template,MQ就是其中的一种导包其实不需要导包,在创建springboot项目时,勾选MQ,就可以了编写配置#......
  • SpringBoot配置静态资源访问
    默认的静态资源映射SpringBoot中的SpringMVC模块利用ResourceHttpRequestHandler来处理静态内容,对静态资源的映射提供了默认的配置。默认情况下,SpringBoot按如下优先级,从上到下将/**所有的资源访问映射到以下目录:classpath:/META-INF/resources/classpath:/resources/......
  • 会员制医疗预约服务管理信息系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。推荐阅读100套最新项目持续更新中.....2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssm+vue等技术项目合集)1.系统功能模块2.管理员功能模块......
  • 财务管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计
    本项目包含可运行源码+数据库+LW,文末可获取本项目的所有资料。推荐阅读100套最新项目持续更新中.....2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssm+vue等技术项目合集)目录1.管理员功能效果图1.1.员工功能模块2.系统功能设计3.数据库E......
  • 基于java+springboot+vue实现的房屋租赁系统(文末源码+Lw+ppt)23-397
    摘要随着社会的不断进步与发展,人们经济水平也不断的提高,于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来,利用计算机网络来处理各行业事务这一概念更深入人心,由于工作繁忙以及疫情的原因,用户到房源公司进行房屋求租也是比较难实施的。如果开发一款房屋租赁......
  • 基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400
    摘 要付费自习室管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对用户信息、自习室准则、自习室、自习计划、留言反馈、订单等功能进行......
  • 基于java+springboot+vue实现的房屋租赁系统(文末源码+Lw+ppt)23-397
    摘要随着社会的不断进步与发展,人们经济水平也不断的提高,于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来,利用计算机网络来处理各行业事务这一概念更深入人心,由于工作繁忙以及疫情的原因,用户到房源公司进行房屋求租也是比较难实施的。如果开发一款房屋租赁......