{String columnName =。阿里开源MySQL中间件Canal快速入门( 四 )。" />

阿里开源MySQL中间件Canal快速入门( 四 )

columns, String tableName, String schemaName) {if ("stock".equals(tableName) && "m4a_miaosha".equals(schemaName)) {AtomicInteger id = new AtomicInteger();columns.forEach((column) -> {String columnName = column.getName();String columnValue = column.getValue();if ("id".equals(columnName)) {id.set(Integer.parseInt(columnValue));}});// TODO: 删除缓存LOGGER.info("Canal删除stock表id:[{}] 的库存缓存", id);}}}代码中有详细的注释,就不做解释了 。
我们跑起代码,紧接着我们在数据库中进行更改UPDATE操作,把法外狂徒张三改成张三1,然后再改回张三,见下图 。

阿里开源MySQL中间件Canal快速入门

文章插图
 
Canal成功收到了两条更新操作:
阿里开源MySQL中间件Canal快速入门

文章插图
 
紧接着我们模拟一个删除Cache缓存的业务,在代码中有:
/** * 秒杀下单接口删除库存缓存 */public static void deleteCache(List<Column> columns, String tableName, String schemaName) {if ("stock".equals(tableName) && "m4a_miaosha".equals(schemaName)) {AtomicInteger id = new AtomicInteger();columns.forEach((column) -> {String columnName = column.getName();String columnValue = https://www.isolves.com/it/sjk/MYSQL/2020-06-12/column.getValue();if ("id".equals(columnName)) {id.set(Integer.parseInt(columnValue));}});// TODO: 删除缓存LOGGER.info("Canal删除stock表id:[{}] 的库存缓存", id);}}「在上面的代码中,在收到m4a_miaosha.stock表的更新操作后,我们刷新库存缓存 。效果如下:」
阿里开源MySQL中间件Canal快速入门

文章插图
 

阿里开源MySQL中间件Canal快速入门

文章插图
 
简单的Canal使用就介绍到这里,剩下的发挥空间留给各位读者大大们 。
总结本文总结了Canal的基本原理和简单的使用 。
「总结如下几点:」
  • Canal实际是将自己伪装成数据库的从库,来读取主数据库发来的Binlog 。
  • Canal用途很广,比如数据库实时备份、索引构建和实时维护(拆分异构索引、倒排索引等)、业务 cache 缓存刷新 。
  • Canal可以推送至非常多数据源,并支持推送到消息队列,方便多语言使用 。
「希望大家多多支持我的原创技术文章公众号:后端技术漫谈,我最全的原创文章都在这里首发 。」
参考
  • https://blog.csdn.net/l1028386804/article/details/81208362
  • https://github.com/alibaba/canal/wiki/QuickStart
  • https://youzhixueyuan.com/database-master-slave-synchronization.html
  • https://www.jianshu.com/p/790a158d9eb3
  • https://blog.csdn.net/xihuanyuye/article/details/81220524
  • https://www.cnblogs.com/ivictor/p/5735580.html




推荐阅读