当前位置:网站首页>解决Redis、MySQL缓存双写不一致问题
解决Redis、MySQL缓存双写不一致问题
2022-08-08 14:51:00 【InfoQ】


更新完数据库,是更新缓存呢,还是删除缓存。
删除缓存,再更新数据库,其实大家存在很大的争议。
正文
给缓存数据设置过期时间
- 先更新数据库,再更新缓存
- 先删除缓存,再更新数据库
- 先更新数据库,再删除缓存
- 原因一(线程安全角度)
- 原因二(业务场景角度)
那么,如何解决呢?采用延时双删策略
缓存延时双删
public class CacheServiceImpl implements ICacheService {
@Resource
private RedisOperator redisOperator;
@Autowired
private IShopService shopService;
//1. 采用延时双删,解决数据库和缓存的一致性
@Override
public void updateHotCount(String id) {
try {
//删除缓存
redisOperator.del("redis_key_" + id);
//更新数据库
shopService.updataHotShop();
Thread.sleep(1000);//休眠1秒
//延时删除
redisOperator.del("redis_key_" + id);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public Integer getHotCount(String id) {
return null;
}
}
复制代码
- 先淘汰缓存
- 再写数据库
- 休眠1秒,再淘汰缓存( 这么做,可以将1秒内所造成的缓存脏数据,再次删除。 )
采用这种同步淘汰策略,吞吐量降低怎么办?
删除缓存重试机制

- (1)更新数据库数据;
- (2)缓存因为种种问题删除失败
- (3)将需要删除的key发送至消息队列
- (4)自己消费消息,获得需要删除的key
- (5)继续重试删除操作,直到成功
读取biglog异步删除缓存

边栏推荐
猜你喜欢
Ubuntu下使用sudo dpkg --configure -a后数据库出现问题
Tungsten Fabric SDN — OpenStack 与 Kubernetes 异构集群统一 SDN 方案
shell三剑客-----sed命令
HMS Core Analysis Service Intelligent Operation Version 6.5.1 Launched
[内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取
优雅地实时检测和更新 Web 应用
更改默认打开应用程序设置
非科班毕业生,五面阿里:四轮技术面+HR一面已拿offer
Create a 2D array
星起航跨境—跨境电商进入3.0时代,卖家迎来全新机遇
随机推荐
【小码匠自习室】AGC023-A :为啥总是N连发?为啥总遇到大神?
1052. The Angry Bookstore Boss
HMS Core Analysis Service Intelligent Operation Version 6.5.1 Launched
Tungsten Fabric SDN — OpenStack 与 Kubernetes 异构集群统一 SDN 方案
EasyExcel导入校验必填项不能为空
创建二维数组
「PHP基础知识」检测数据类型
【小码匠自习室】CSP-J/S复试高分秘诀经验分享
2022-08-07 The fifth group Gu Xiangquan study notes day31-collection-Map collection
JS-BOM-factorial calculation
一打是多少个?
Talking about the underlying data structure of Redis
vsomeip环境搭建及helloworld测试例跑通
星起航跨境—跨境电商进入3.0时代,卖家迎来全新机遇
TCP补充
Shell三剑客之sed命令详解
医学图像数据增强-重采样itk
LeetCode 每日一题 2022/8/1-2022/8/7
从洞察到决策,一文解读标签画像体系建设方法论丨DTVision分析洞察篇
进程和线程