多级缓存设计和实战应用 多层次缓存设计和实际应用(5)
多级缓存设计和实战应用

方案二、在项目启动完成后,通过访问接口同步
@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对应的客户端,完成对数据库的同步。
相关阅读
-
编写一个简单的网页结构 网页设计作业html成品
小编为网友们解答编写一个简单的网页结构和网页设计作业html成品方面的介绍,具体详情如下: HTML(HyperText Markup Language)是一种简单、通用的超文本标记语言,Web服务器返回给客户端的最常
-
access数据库的对象是什么 了解access数据库的结构层次
下面为网友们详细介绍access数据库的对象是什么和了解access数据库的结构层次方面的内容,接下来分享详细内容。 说到数据处理,大家首先想到的是Excel,其实,Office中的数据处理软件除了E
-
web服务器怎么配置 免费个人web服务器推荐
对于许多网友来说web服务器怎么配置和免费个人web服务器推荐方面的内容,具体详情如下: 回想一下一个http请求的过程,你在浏览器输入xxx.com,经过域名解析 发起tcp的3次握手 建立tcp连接后
-
信息加密、解密与常用算法的基本概念和相关知识
本文为您带来的是信息加密、解密与常用算法的基本概念和相关知识的话题,请看下面详细的介绍。 一、信息加密概念 信息加密技术是对信息进行伪装,使得信息非法窃取者无法理解信息的真


