个人名片:
博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看
五、缓存同步
大多数情况下,浏览器查询到的都是缓存数据,如果缓存数据与数据库数据存在较大差异,可能会产生比较严重的后果。
所以我们必须保证数据库数据、缓存数据的一致性,这就是缓存与数据库的同步。
缓冲同步是数据同步的一种常见方式,它通常发生在CPU和内存之间,以及数据设备和主机内存之间。缓冲同步的原理是,在数据写入或读取时,先将数据存储在缓冲区中,待缓冲区中的数据达到一定数量或一定时间后再进行同步操作,以减少同步操作的次数和时间,从而提高数据传输的效率。
缓冲同步的优点是可以减少同步操作的次数和时间,提高数据传输的效率,缺点是如果缓冲区中的数据没有及时同步,可能会导致数据不一致或丢失。
1. 数据同步策略
数据同步是一个在计算机科学和信息技术领域广泛使用的术语,它指的是将数据从一个系统或位置复制或传输到另一个系统或位置的过程。数据同步可以用于各种不同的应用场景,例如备份、复制、同步不同系统之间的数据等。
在数据同步方面,有多种不同的方法和工具可以使用。下面介绍几种常见的数据同步方法:
- 直连同步
直连同步是通过定义好的规范接口API和基于动态链接库的方式直接连接业务库进行数据同步。
这种方式的优点是配置简单,实现容易,适合操作型业务系统的数据同步。但是,它对源系统的性能影响较大,当执行大批量数据同步时会降低业务系统的性能。
- 数据文件同步
数据文件同步是指通过约定好的文件编码、大小、格式等,直接从源系统生成数据的文本文件,然后由专门的文件服务器加载到目标数据库系统中。
当数据源包含多个异构的数据库系统时,这种方式比较简单、适用。
- 数据库日志解析同步
数据库日志解析同步是通过解析源系统的数据库日志文件来获取数据变化,然后将这些变化应用到目标系统,实现数据同步。
这种方式可以减少对源系统的性能影响,但是需要解析数据库日志文件,实现起来较为复杂。
除了以上几种常见的数据同步方法外,还有定时任务、双写、使用Logstash等方式来实现数据同步。不同的应用场景需要选择不同的数据同步方式,以满足数据同步的实时性、可靠性和性能等要求。
缓存数据同步的常见方式有三种:
设置有效期:给缓存设置有效期,到期后自动删除。再次查询时更新
- 优势:简单、方便
- 缺点:时效性差,缓存过期之前可能不一致
- 场景:更新频率较低,时效性要求低的业务
同步双写:在修改数据库的同时,直接修改缓存
- 优势:时效性强,缓存与数据库强一致
- 缺点:有代码侵入,耦合度高;
- 场景:对一致性、时效性要求较高的缓存数据
**异步通知:**修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据
- 优势:低耦合,可以同时通知多个缓存服务
- 缺点:时效性一般,可能存在中间不一致状态
- 场景:时效性要求一般,有多个服务需要同步
而异步实现又可以基于MQ或者Canal来实现:
1)基于MQ的异步通知:
解读:
- 商品服务完成对数据的修改后,只需要发送一条消息到MQ中。
- 缓存服务监听MQ消息,然后完成对缓存的更新
依然有少量的代码侵入。
2)基于Canal的通知
解读:
- 商品服务完成商品修改后,业务直接结束,没有任何代码侵入
- Canal监听MySQL变化,当发现变化后,立即通知缓存服务
- 缓存服务接收到canal通知,更新缓存
代码零侵入