为什么说延时双删很扯淡
redis和mysql数据一致性的问题
在这里,我们讨论三种更新策略:
- 先更新缓存,再更新数据库
- 先更新数据库,再更新缓存
- 先删除缓存,再更新数据库
- 先更新数据库,再删除缓存
第一种,先更新缓存,再更新数据库
问题:更新缓存成功,更新数据库失败,导致数据不一致。
第二种,先更新数据库,再更新缓存
问题:
1、A更新数据库
2、B更新数据库
3、B写入缓存
4、A写入缓存
出现数据不一致。
考虑另一种情况, 有如下两点:
(1)如果你是一个写数据库场景比较多,而读数据场景比较少的业务需求,采用这种方案就会导致,数据压根还没读到,缓存就被频繁的更新,浪费性能。
(2)如果你写入数据库的值,并不是直接写入缓存的,而是要经过一系列复杂的计算再写入缓存。那么,每次写入数据库后,都再次计算写入缓存的值,无疑是浪费性能的。显然,删除缓存更为适合。
第三种,先删除缓存,再更新数据库。
问题:
1、A删除缓存
2、B查询数据库获取旧值
3、B更新了缓存
4、A更新数据库
出现数据不一致的问题
延时双删
public void write(String key,Object data){redis.delKey(key);db.updateData(data);Thread.sleep(1000);redis.delKey(key);
}
问题一:延时双删,演变成了:先更新数据库,再删除缓存。。。。
比如:
1、A删除缓存
2、B查询数据库获取旧值
3、B更新了缓存
4、A更新数据库
5、A延时删缓存
1~3步执行后,数据库和缓存是一致的,相当于没删除。
4~5步:先更新数据库,再删缓存。
所以延时双删演变成了:先更新数据库,再删除缓存。问题还是没解决。。。
为什么?假设,此时,在第4步执行之前,又来了个查询C,C查询到旧值。第6步:C将旧值插入缓存。此时出现缓存和数据库不一致。
延时并不能解决:C插入缓存的操作在第5步后面执行,比如C遇到网络问题、GC问题等。当然这是小概率,但并不代表不存在。
当然,延时越长,这个问题越能规避。如果业务需求不是非常严格,是可以忽略的。
问题二:吞吐量
问题三:数据库更新后,无法保证下一次查询,从缓存获取的值和数据库是一致的。
第四种,先更新数据库,再删除缓存
问题:上面C的查询,已经说明问题了。
出现数据不一致的概率,比较小。采取这个方案,取决于业务需求。
终极方案
请求串行化
真正靠谱的方案:将访问操作串行化
- 先删缓存,将更新数据库的操作放进有序队列中
- 从缓存查不到的查询操作,都进入有序队列
需要解决的问题:
- 读请求积压,大量超时,导致数据库的压力:限流、熔断
- 如何避免大量请求积压:将队列水平拆分,提高并行度。
- 保证相同请求路由正确。
为什么说延时双删很扯淡相关推荐
- redis 为什么说延时双删很扯淡
什么是延迟双删: https://blog.csdn.net/huizhi2533/article/details/107021249/ redis和mysql数据一致性的问题 在这里,我们讨论三种更 ...
- Redis延时双删实现mysql和redis的数据一致性
在高并发的业务场景下,为了保护数据库,我们一般都会做缓冲.所以,假设我们用redis做一个缓冲操作,让请求先访问redis,而不是直接访问mysql,来缓解数据库的压力. 平常的读取缓存没啥问题,但假 ...
- redis数据一致性之延时双删详解
在使用redis时,需要保持redis和数据库数据的一致性,最流行的解决方案之一就是延时双删策略,今天我们就来详细刨析一下 注意:要知道经常修改的数据表不适合使用redis,因为双删策略执行的结果是把 ...
- db与redis一致性解决策略:延时双删
文章目录 背景 读 写 1.先更新redis再更新db 2.先更新db再更新redis 3.先更新DB再删除redis 4.先删除redis再更新DB 5.延迟双删 6.思考变种 总结 适用场景 背景 ...
- 梦想一旦没着没落,就感觉很扯淡
❣️ 国庆节去哪玩,我去西安,你呢?| 第161篇 "大王.二爷她们打算在中弘卓越买房了." "嗯......" "她们问我买不买?" &q ...
- 大专云计算是计算机吗,[扫盲加扯淡,我说云计算]大专学云计算很扯淡吗
如今互联网上冒出的科技新词都有一个普遍特色,就是即便给你准确的名词解释,即便你能看懂每一个汉字所代表的意义,依旧不太明白其到底是个什么意思,比如最近非常热门的新概念"云计算"(Cl ...
- 雷观(八):等我有钱了再付费,是一种很扯淡很没有远见的想法
2019独角兽企业重金招聘Python工程师标准>>> 在从事软件互联网相关行业6年多以来,很少发现有人有"付费"的意识,虽然他们是IT相关产业的劳动者. 在我的 ...
- CSAPP第五章就在“扯淡”!
"你的时间有限,所以不要为别人而活.不要被教条所限,不要活在别人的观念里.不要让别人的意见左右自己内心的声音.最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实 ...
- 空谈Saas都扯淡,让你看看真正的云计算
最近"虚拟化"的话题似乎热度有所降低,而"云计算"的概念却不断升温,就连Vmware的新的服务器虚拟化产品,都要加上一个第一款"云计算"操作 ...
最新文章
- “作为字节跳动面试官,有些话我不得不说!”
- docker运行gerrit(代码审查工具)
- 优质网站策划从四个方面进行判断
- 读《大型网站技术架构:核心原理与案例分析》第一章:大型网站架构演化
- OceanBase如何解决支付宝数据库的高一致性
- php layui table,Layui table组件相关介绍
- python统计字数分布可视化展示_数据的概率分布并用python实现概率分布可视化图...
- R语言ETL工程:集合运算(intersect/union/setdiff)
- linux leach仿真数据传输图性能,基于OMNeT-+-+的Leach协议的仿真研究.pdf
- 『天涯杂谈』语不惊人死不休——2004年最一针见血的500句话(前100句)
- 手把手教你 | 识别色环电阻/贴片电阻阻值
- 公有云、私有云、私有化_私有云的未来是什么?
- mysql日期教程_Navicat for MySQL 设置日期时间栏位教程(图文)
- 为什么不是每个人都过着他梦想中的生活呢?
- 在iPad上使用Office 365
- 毕业论文的研究背景怎么写?
- Beyond compare添加插件
- 喜马拉雅-处世人生-老炮儿崔哥侃美国(完结)
- sonarqube官方文档翻译之UserGuide
- TiDB Online DDL 在 TiCDC 中的应用丨TiDB 工具分享