使用 Canal + 责任链模式实现 Mysql 和 Redis 同步

使用 Canal + 责任链模式实现 Mysql 和 Redis 同步

薛定谔的汪

前言

现在公司的项目实际场景中,当数据库的内容变更时,需要刷新缓存。当前的情况,经常把操作 Redis 缓存的代码耦合到了核心业务代码中,为了使之解耦,引入了 Canal 中间件。当数据库发生写入操作时,缓存可以自动刷新,实现刷新缓存的操作对核心业务代码的零侵入。

Canal 介绍

Canal 是Alibaba 开源的一个由 java 开发,基于数据库增量 binlog 日志解析,提供增量数据订阅和消费的中间件,目前只支持 mysql。

用途

Canal 可以用来作:

  1. 数据库镜像
  2. 数据库实时备份
  3. 多级索引 (卖家和买家各自分库索引)
  4. search build
  5. 业务cache刷新
  6. 价格变化等重要业务消息

工作原理

Canal的工作原理是通过订阅 Master 主库的 binlog 日志,自身伪装成一个 Slave 节点,向 master发送 dump 协议,master 收到 dump 协议后,向 Canal 发送 binlog,Canal 收到 binlog后,对其进行解析。

注意:mysql 实现主从同步须要开启 binlog 和 Row模式

Canal Server 的下载和安装可以查看官方文档 https://github.com/alibaba/canal

项目介绍

了解了 Canal 的原理后开发就会变得很便捷,对此写了一个利用 Canal 同步 Mysql 和 Redis 的 Canal 客户端架子。

项目 git 地址:https://github.com/zhengyakai/canal-sync-mysql-redis

因为 Canal 客户端要处理 Canal 服务端的 “INSERT”、“DELETE”、“UPDATE”事件,最先想到的设计模式是事件监听器模式和责任链模式,二者都很符合该应用场景。

二者我都实现、对比了下,事件监听器模式是借助于 Spring 提供的 ApplicationListener 来实现,代码复杂些,责任链模式更简单。

  • Title: 使用 Canal + 责任链模式实现 Mysql 和 Redis 同步
  • Author: 薛定谔的汪
  • Created at : 2018-09-23 18:01:54
  • Updated at : 2023-11-17 19:37:37
  • Link: https://www.zhengyk.cn/2018/09/23/framework/canal-sync-mysql-redis/
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
使用 Canal + 责任链模式实现 Mysql 和 Redis 同步