首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
Lyh0
2019-09-07 17:11
已编辑
厦门大学 Java
关注
已关注
取消关注
关于数据库和缓存一致性问题
关于数据库和缓存一致性问题,网上的说法大都是先更新数据库,再删除缓存。可是如果是 :
1.线程A更新数据库
2.线程B查询从缓存中得到旧数据
3.线程A让缓存失效。
这样线程B不就是得到脏数据吗??请问有大佬帮忙解答一下吗?
#MySQL#
提示
全部评论
推荐
最新
楼层
安静的小白
华东理工大学 Java
老哥,我的理解:你的第3步错了,应该是让缓存失效。你说的那种情况是有可能发生的,A更新成功,B过来读缓存成功,获取老数据,之后A再让缓存失效;从此以后,后面的查询读的都是新数据了,因为缓存已经失效了,需要读数据库,然后把新的值设置到缓存里。。。所以你说的这种情况,只会影响那一次查询,只有一次,一次的概率很低很低,相对于先删缓存,在更新数据库造成的脏数据好太多了。 我的理解:1.先更新数据库,再删缓存最大的问题在于更新成功,没办法确保删缓存成功,因为没办法采用单机事务去保证这两个操作的原子性,所以可以采用一种不断重试的ACK机制,你可以自己写个重试机制,也可以使用市面上经常用的mq来保证,因为mq为了保证容错性,也实现了ack机制,步骤是可以用一个工具将mysql的binlog日志抓取出来,然后采用mq去确保删缓存一定会成功; 2.先更新数据库,再删缓存还有个弊端是:(1)A读数据,缓存失效,需要读数据库,(2)B更新数据库,更新成功,(3)B是缓存失效,(4)A将读出来的数据设置到缓存里,此种情况是会产生数据不一致的,但是这是极限状态更新数据库需要锁表,读数据库不需要,写的时间大于读的时间,所以此种情况很难发生,基于以上讨论,所以先更新数据库,再删缓存,相对于其他方法是比较理想的(或许未来会有更好的方法,但是目前这种方法所带来的的影响相对于其他的是较小的) 以上仅供参考,个人见解
点赞
回复
分享
发布于 2019-09-07 16:14
练绝活
阿里巴巴_大淘宝技术_研发工程师
https://coolshell.cn/articles/17416.html
点赞
回复
分享
发布于 2019-09-07 15:02
统行
西安石油大学 Java
先更新DB,在删除缓存,损失点一致性,虽然可能第一时间读不到最新的,但是逻辑没问题
点赞
回复
分享
发布于 2019-09-07 15:01
这瓜保熟吗
华为_软件工程师
只有极高并发才可能出现楼主说的问题,上队列串行化可以解决
点赞
回复
分享
发布于 2019-09-08 09:31
哈哈(ಡωಡ)hiahiahiamn
门头沟学院 Java
弄个操作顺序的队列
点赞
回复
分享
发布于 2019-09-07 16:48
Lyh0
楼主
厦门大学 Java
如果是针对秒杀这种一致性要求很高的场景呢?我看慕课上面就是直接用redis单线程访问控制,然后用消息队列来实现最终一致性。可是这样做性能应该很低下吧?
点赞
回复
分享
发布于 2019-09-07 15:20
C.A.Y.P
五邑大学 Java
牺牲点一致性
点赞
回复
分享
发布于 2019-09-07 15:17
小度小度
南京大学 Java
感觉和事务的隔离性有关,四种隔离级别可以看下,如果隔离级别是脏读,那就有可能读到脏数据
点赞
回复
分享
发布于 2019-09-07 15:01
yzltrs
江西财经大学 Java
应该是先删缓存再更新据库吧。。。我认为流程是:先把缓存的数据删了,然后更新数据库,最后重新注入缓存
点赞
回复
分享
发布于 2019-09-07 14:56
暂无评论,快来抢首评~
相关推荐
06-24 17:02
门头沟学院 客户端其它
幸存者偏差:未缴纳的违约金
当时真是走投无路了。 我接受了西安闻泰那个转岗机会,去了测试岗位。面试官看着我的简历直接问:“你明明是干开发的,为什么想来做测试?” 我哪敢说没得选啊,只能硬着头皮说:“我这人喜欢挑战!” 然后对着面试官就是一顿输出,没想到他还挺认可。那时候手上一个offer都没有,心里是真慌。 想着有总比没有强吧?一咬牙,就把学校盖好章的纸质三方协议寄给闻泰了。结果!戏剧性的一幕来了! 就在寄出去没多久,另一家我挺想去的互联网厂的开发岗位,居然通知我技术面过了,就差最后一个HR面!我那个激动啊,又慌得要死——三方都寄出去了!我赶紧给那家互联网厂的HR小姐姐打电话。 我留了个心眼,先问:“咱们的offer,公...
为了找工作你花了哪些钱?
点赞
评论
收藏
分享
06-23 23:09
已编辑
蚌埠坦克学院 前端工程师
腾讯微信支付前端暑期实习一面3.28
一面面了2h30min+,是特别特别想去的地方,但是二面挂了,最后还是没有去成,也许也是命吧上来两个算法题:滑动窗口最大值前 K 个高频元素变体版 需要额外按ascii码排序JS的基本数据类型Object属于基本数据类型吗为什么他是引用数据类型呢假如我有一个Object,let b = a,那b拿到的是a的深拷贝还是浅拷贝?b修改对象中数据的值,a会跟着变吗如果我希望b深拷贝a对象中所有的信息,应该怎么做问_deepclone是不是js自带的方法,问我提到的这些深拷贝方法能支持的数据类型json.stringify使用的时候需要注意什么问题(如果出现a引用b,b引用a的话,用这种方法会出现什么...
牛客创作赏金赛
点赞
评论
收藏
分享
05-28 12:47
华北水利水电大学 Java
不是这些是该我一个实习生写的吗
还只是笔试题 看了一眼一点做的欲望都没有
iiooz:
干嘛,招架构师吗
点赞
评论
收藏
分享
05-21 22:02
宝鸡文理学院 Java
大佬们指导一下简历,26届目前一个实习office都没有,秋招还有希望嘛
Java抽象带篮子:
是onlyfans不是office啊
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
06-23 18:30
拿到毕业证后得知,整个部门都没了
现在人处于一个懵逼的状态,难受想哭,因为很早就签了合同,八股也很久没复习了,现在去面试估计也是寄,不知道何去何从了😭
月村毛球:
美团优选吗
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
1
21
分享
评论
提到的真题
返回内容
招聘动态
查看更多
现代汽车前瞻技术研发挑战赛
26届投递链接合集
快手
全站热榜
更多
1
...
秋招就投这些了
3.7W
2
...
求助!如何拒绝同个小区的同事蹭车?
7685
3
...
不懂“心眼子”会吃大亏!测测你的心眼子能拿几分?
5917
4
...
女友爸爸帮我花钱找了工作,我爸妈觉得应该的
4150
5
...
是不是找不到工作了
3334
6
...
正式回归牛客了
3251
7
...
吃上软饭了家人们!
3192
8
...
2025年06月25日 聚散离合 此乃常态 你要习惯
3112
9
...
各位有面过长沙银行吗?真是恶心
2965
10
...
走遍天下 难舍美团
2910
创作者周榜
更多
正在热议
更多
#
26届校招投递进展
#
6041次浏览
72人参与
#
考公VS就业,你怎么选?
#
60584次浏览
405人参与
#
为了找工作你花了哪些钱?
#
17898次浏览
152人参与
#
你秋招想去哪些公司
#
7822次浏览
435人参与
#
第一份工作能做外包吗?
#
17431次浏览
200人参与
#
你都遇到过哪些离谱的求职经历
#
11916次浏览
37人参与
#
分享一个让你热爱工作的瞬间
#
29039次浏览
308人参与
#
那些我实习了才知道的事
#
209737次浏览
1712人参与
#
如何看待应届生身份?
#
119302次浏览
1166人参与
#
虾皮求职进展汇总
#
241877次浏览
1793人参与
#
你见过最离谱的招聘要求是什么?
#
195834次浏览
1456人参与
#
大学四年该怎么过,才不算浪费时间?
#
6152次浏览
58人参与
#
应届生进小公司有什么影响吗
#
75139次浏览
1020人参与
#
产品薪资爆料
#
115415次浏览
824人参与
#
24届的你们现状如何了?
#
74492次浏览
425人参与
#
机械人你觉得今年行情怎么样?
#
606次浏览
17人参与
#
选完offer后,你后悔学机械吗?
#
30676次浏览
173人参与
#
制造业的秋招小结
#
90467次浏览
1629人参与
#
作业帮求职进展汇总
#
54026次浏览
362人参与
#
机械人求职现状
#
14619次浏览
136人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务