缓存数据同步的常见方式有三种:

设置有效期:给缓存设置有效期,到期后自动删除。再次查询时更新

  • 优势:简单、方便

  • 缺点:时效性差,缓存过期之前可能不一致

  • 场景:更新频率较低,时效性要求低的业务

同步双写:在修改数据库的同时,直接修改缓存

  • 优势:时效性强,缓存与数据库强一致

  • 缺点:有代码侵入,耦合度高;

  • 场景:对一致性、时效性要求较高的缓存数据

异步通知:修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据

  • 优势:低耦合,可以同时通知多个缓存服务

  • 缺点:时效性一般,可能存在中间不一致状态

  • 场景:时效性要求一般,有多个服务需要同步

而异步实现又可以基于MQ或者Canal来实现:

1)基于MQ的异步通知:

解读:

  • 商品服务完成对数据的修改后,只需要发送一条消息到MQ中。

  • 缓存服务监听MQ消息,然后完成对缓存的更新

依然有少量的代码侵入。

2)基于Canal的通知

解读:

  • 商品服务完成商品修改后,业务直接结束,没有任何代码侵入

  • Canal监听MySQL变化,当发现变化后,立即通知缓存服务

  • 缓存服务接收到canal通知,更新缓存

代码零侵入

Canal数据同步策略相关推荐

  1. 数据仓库数据同步策略

    1. 实时数仓同步数据 实时数仓数据由Flink源源不断从Kafka当中读数据计算,无需手动同步数据到实时数仓. 2.离线数仓同步数据 2.1 用户行为数据同步 2.1.1 数据通道 用户行为数据由F ...

  2. springboot实现增量备份_SpringBoot canal数据同步解决方案

    SpringBoot canal数据同步解决方案 一.需求 微服务多数据库情况下可以使用canal替代触发器,canal是应阿里巴巴跨机房同步的业务需求而提出的,canal基于数据库的日志解析,获取变 ...

  3. canal - 数据同步工具

    一.应用场景 在前面Echarts - 实现图表显示中,我们使用了服务调用(统计表中的信息通过调用用户模块服务来获取)获取统计信息,这样耦合度高,效率相对较低,目前有另一种方法,通过实时同步数据库表的 ...

  4. asp.net mvc redis同步mysql_Mysql和Redis数据同步策略 - 元思 - 博客园

    为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致. 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓 ...

  5. Mysql和Redis数据同步策略

    为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致. 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓 ...

  6. 数据仓库之数据同步策略

    1.数据同步 因为我们需要每天分析的数据都是最新的!!!所以就涉及数据的同步 2.表的种类及其概念: 一般情况下表分为三个类型,分别是实体表.维度表和事务表 2.1 实体表: 实体表,一般是指一个现实 ...

  7. 光闸mysql同步_mysql跨网域canal数据同步

    需求:高密网和低密网之间的mysql文件落地同步.          分析:解决不同网段之间的数据通讯可以采用光闸或者网闸. 解决mysql之间的同步则可以采用canal.利用canal生成数据库变化 ...

  8. 集群没有leader_ZooKeeper 集群中 Leader 与 Follower 的4种数据同步策略

    首先要声明一点,zk集群中,leader服务器有着比较重要的存在,Follower 服务器只是处理非事务性请求,leader服务器主要负责事务性请求,Follower 服务器在遇到事务性请求以后还是会 ...

  9. Apache ZooKeeper - ZooKeeper 集群中 Leader 与 Follower 的数据同步策略

    文章目录 流程图 why ? How ? 何时触发数据同步的机制? 同步哪些数据 同步方式 DIFF 同步 TRUNC+DIFF 同步 TRUNC 同步 SNAP 同步 同步后的处理 源码分析 流程图 ...

最新文章

  1. MultiRow发现之旅(六)- 使用MultiRow开发票据应用(附源码)
  2. python官网下载步骤linux-官方下载python源码,编译linux版本的python
  3. Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向...
  4. opencv同时开启两个外接USB摄像头采集图像信息,并设置摄像头输出图像的分辨率
  5. OpenCL 第7课:旋转变换(1)
  6. 可有可无的Mysql工作技巧
  7. pycharm同步代码到远程服务器
  8. Keepalived相关参数说明
  9. pandas 学习(四)—— 数据处理(清洗)、缺失值的处理
  10. 课堂练习--最大子数组和
  11. 送书!60 本签名书!
  12. 微信公众号开发中的用户账号绑定
  13. php在线拍照代码,PHP+Javascript实现在线拍照功能实例
  14. 通过bootstrap4框架制作商城网页
  15. 采用commons-emai发送电子邮件
  16. nandflash地址的物理地址,逻辑地址,spare地址等理解
  17. 迪普科技“高”在哪里?
  18. 计算机中信息的表示方法 教案,计算机中的数的表示教案
  19. 三极管的基础知识(下)②
  20. 数字手写识别——Java实现KNN算法

热门文章

  1. Android 笔记一
  2. 用putty中的pscp命令拷贝文件
  3. Arcgis desktop 9.3的破解方法_经验版
  4. BZOJ4771 七彩树(dfs序+树上差分+主席树)
  5. 各大公司容器云的技术栈对比
  6. 基于数据库的分布式锁实现
  7. 乐观锁与悲观锁深入学习
  8. Java Scala 混合编程导致 编译失败 ,【找不到符号】问题解决
  9. Redis 未授权访问漏洞
  10. uploadify的使用错误