多级缓存设计和实战应用 多级缓存的设计与应用(5)
导读:多级缓存设计和实战应用,方案二、在项目启动完成后,通过访问接口同步 @GetMapping("/loadRedis") public String loadRedis() throws JsonProcessingException { // 初始化缓存 try { // 1.从数据库查询 Li
多级缓存设计和实战应用

方案二、在项目启动完成后,通过访问接口同步
@GetMapping("/loadRedis")
public String loadRedis() throws JsonProcessingException {
// 初始化缓存
try {
// 1.从数据库查询
List<Item> itemList = itemService.list();
// 2.放入缓存
for (Item item : itemList) {
// item序列化为JSON
String json = MAPPER.writeValueAsString(item);
// 存入redis
redisTemplate.opsForValue().set("item:id:" + item.getId(), json);
}
} catch (Exception e) {
return "loadRedis failed!";
}
return "loadRedis sucess!";
}
缓存数据同步如何做?
数据同步策略
缓存数据同步的常见方式有三种:
设置有效期:给缓存设置有效期,到期后自动删除。再次查询时更新
- 优势:简单、方便
- 缺点:时效性差,缓存过期之前可能不一致
- 场景:更新频率较低,时效性要求低的业务
同步双写:在修改数据库的同时,直接修改缓存
- 优势:时效性强,缓存与数据库强一致
- 缺点:有代码侵入,耦合度高;
- 场景:对一致性、时效性要求较高的缓存数据
异步通知:修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据
- 优势:低耦合,可以同时通知多个缓存服务
- 缺点:时效性一般,可能存在中间不一致状态
- 场景:时效性要求一般,有多个服务需要同步
异步通知方案:
1)基于MQ异步消息
基本流程如下:

缓存同步流程描述:
- 业务服务完成对数据的修改后,只需要发送一条消息到MQ中。
- 缓存服务监听MQ消息,然后完成对缓存的更新
缺点:依然有少量的代码侵入。
2)基于Canal的通知
Canal是阿里巴巴旗下的一款开源项目,基于Java开发。基于数据库增量日志解析,提供增量数据订阅和消费。GitHub的地址:https://github.com/alibaba/canal
Canal是基于mysql的主从同步来实现的,MySQL主从同步的原理如下:

- MySQL master 将数据变更写入二进制日志( binary log),其中记录的数据叫做binary log events
- MySQL slave 将 master 的 binary log events拷贝到它的中继日志(relay log)
- MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
而Canal类似于MySQL的一个slave节点,从而监听master的binary log变化。
再把得到的变化信息通知给Canal对应的客户端,完成对数据库的同步。
相关阅读
-
服务器优化的重要性 服务器优化方法
如果想了解服务器优化的重要性的IT小经验,一定能解决您的问题的,一起来了解吧! 服务器优化是指通过对服务器硬件、软件和网络进行调整和优化,以提高服务器的性能和稳定性,从而提
-
怎么创建网络平台账号 创建网站免费注册
关于这个怎么创建网络平台账号和创建网站免费注册方面的知识,具体详情如下: 在当下,传统的线下营销渠道已经无法满足消费者的多样化需求,所以很多企业商家都会选择搭建一个网站平
-
创建一个网站要多少钱 自己做一个网站需要的费用
对于大多数网友来说创建一个网站要多少钱和自己做一个网站需要的费用的方法内容,继续往下看吧! 想搞一个网站,我们先了解一下搞个网站需要多少钱?网站建设费用主要包括:网站搭建
-
OSI七层网络模型传输层详解 传输层使用的协议有哪些
今日重点为您介绍OSI七层网络模型传输层详解的IT知识,接下来小编为网友介绍。 传输层是OSI七层网络模型中的第四层,主要负责为应用层提供端到端的数据传输服务,同时也可以对网络层提


