首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
不愿透露姓名的神秘牛友
昨天 18:37
pdd你想干啥啊!
211本+一段3个月的字节后端实习,面试八股基本全答,算法5分钟秒两道,6.9发起的信息确认,现在仍然没有收到offer。。。 有没有uu仍然在流程中被泡池子🙋
点赞
评论
收藏
分享
06-23 18:06
昆明理工大学 算法工程师
末尾了,哥们终于不是0offer了
感谢面试官的不杀之恩没有问太细哪怕再细一点我都得死祝大家都拿到offer!
xsk_:
拿到又能怎样,上班之后才是折磨的开始
点赞
评论
收藏
分享
06-04 00:11
成都信息工程大学 前端工程师
我没有实习经历,这家公司boss却找上我,好奇怪,有啥要注意的吗,会踩坑吗
不要卷我了:
大概率是收你简历拿KPI的
点赞
评论
收藏
分享
06-11 13:34
门头沟学院 C++
0实习双非进大厂,我做了什么
做梦
offe从四面八方来:
我真的没时间陪你闹了
点赞
评论
收藏
分享
昨天 16:53
门头沟学院 Java
还没挣钱呢先花钱了
为了找工作你花了哪些钱?
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
1
21
分享
评论
提到的真题
返回内容
招聘动态
查看更多
现代汽车前瞻技术研发挑战赛
26届投递链接合集
快手
全站热榜
更多
1
...
秋招就投这些了
3.4W
2
...
AI应用面试题
2.8W
3
...
不懂“心眼子”会吃大亏!测测你的心眼子能拿几分?
1.7W
4
...
求助!如何拒绝同个小区的同事蹭车?
6302
5
...
26届各互联网厂开启秋招时间线汇总
6085
6
...
最emo的一天
4611
7
...
暑期实习后发现自己不适合大厂
4304
8
...
女友爸爸帮我花钱找了工作,我爸妈觉得应该的
3803
9
...
莉莉丝游戏测试HR面
3757
10
...
这后端是真不想干了,节子实习浅谈
3559
创作者周榜
更多
正在热议
更多
#
为了找工作你花了哪些钱?
#
14578次浏览
135人参与
#
你秋招想去哪些公司
#
4710次浏览
276人参与
#
第一份工作能做外包吗?
#
15005次浏览
188人参与
#
选完offer后,你后悔学机械吗?
#
30325次浏览
171人参与
#
职场捅娄子大赛
#
400977次浏览
4010人参与
#
你都遇到过哪些离谱的求职经历
#
9960次浏览
32人参与
#
2023届毁约公司名单
#
197727次浏览
950人参与
#
26届校招投递进展
#
2458次浏览
48人参与
#
你见过最离谱的招聘要求是什么?
#
195026次浏览
1455人参与
#
制造业的秋招小结
#
90183次浏览
1625人参与
#
应届生进小公司有什么影响吗
#
74454次浏览
1017人参与
#
如何看待应届生身份?
#
119002次浏览
1162人参与
#
大学四年该怎么过,才不算浪费时间?
#
6060次浏览
58人参与
#
应届生应该先就业还是先择业
#
110220次浏览
643人参与
#
你今年的平均薪资是多少?
#
128547次浏览
666人参与
#
如果不考虑收入,你最想做什么工作?
#
22168次浏览
134人参与
#
分享一个让你热爱工作的瞬间
#
28754次浏览
301人参与
#
国企/银行/研究所公司爆料
#
138968次浏览
807人参与
#
商战,最累的是我们
#
17885次浏览
78人参与
#
如果实习可以转正,你会不会放弃秋招
#
518833次浏览
4507人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务