当前位置:   article > 正文

实战:实现缓存和数据库一致性方案:mysql+canal+rabbitmq+redis_canal+mq+redis缓存一致性

canal+mq+redis缓存一致性

最近不是正好在研究 canal 嘛,刚巧前两天看了一篇关于解决缓存与数据库一致性问题的文章,里边提到了一种解决方案是结合 canal 来操作的,所以阿Q就想趁热打铁,手动来实现一下。

架构

文中提到的思想是:

  • 采用先更新数据库,后删除缓存的方式来解决并发引发的一致性问题;

  • 采用异步重试的方式来保证“更新数据库、删除缓存”这两步都能执行成功;

  • 可以采用订阅变更日志的方式来清除 Redis 中的缓存;

基于这种思想,阿Q脑海中搭建了以下架构

  • APP 从 Redis 中查询信息,将数据的更新写入 MySQL 数据库中;

  • Canal 向 MySQL 发送 dump 协议,接收 binlog 推送的数据;

  • Canal 将接收到的数据投递给 MQ 消息队列;

  • MQ 消息队列消费消息,同时删除 Redis 中对应数据的缓存;

环境准备

这篇文章中有 mysql 的安装教程:mysql 安装

这篇文章中有 canal 的安装教程以及对 mysql 的相关配置:canal安装

考虑到我们服务器之前安装过 RabbitMQ ,所以我们就用 RabbitMQ 来充当消息队列吧。

Canal 配置

修改 conf/canal.properties 配置

  1. # 指定模式
  2. canal.serverMode = rabbitMQ
  3. # 指定实例,多个实例使用逗号分隔: canal.destinations = example1,example2
  4. canal.destinations = example 
  5. # rabbitmq 服务端 ip
  6. rabbitmq.host = 127.0.0.1
  7. # rabbitmq 虚拟主机 
  8. rabbitmq.virtual.host = / 
  9. # rabbitmq 交换机  
  10. rabbitmq.exchange = xxx
  11. # rabbitmq 用户名
  12. rabbitmq.username = xxx
  13. # rabbitmq 
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号