首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
01-29 15:22
门头沟学院 服装/纺织设计
赛思电子|视频
1.自我介绍 2.介绍一下你负责的工作,所做项目实现的功能?3.遇到的问题有哪些?怎么解决的?耗时多久?4.为什么想来西安?老家哪里的?时长15分钟左右,体验极差,晚上面的,感觉面试官慌慌张张的,急着下班。纯纯KPI
查看4道真题和解析
点赞
评论
收藏
分享
昨天 12:17
山东大学 C++
腾讯提前批实习耐面王
1.14约面TEG云架构软件测试测试开发岗1.19一面1h,光速下二面1.23二面1h,跟mt聊的很好,面完显示通过1.28约1.29三面 30min,应该是主管面,面完+1说还可以,不过技术栈不太匹配,可能给我推到别的组1.30下四面 同TEG同岗位应该是换组了 2.3四面1h 体验很差,感觉组里已经不招人了,面官问的问题字少表达不清楚,也不去引导,我问她她就无奈的看着我,反问环节回答我的问题也是非常敷衍,感觉就是不想招人2.4果不其然回池子了,光速被捞,下周一继续一面
发面经攒人品
点赞
评论
收藏
分享
01-21 04:38
中国矿业大学 大数据开发工程师
不是说年底缺人吗
再找不到实习就找不到工作了
喵_coding:
年底缺人是短视频营造出来的
而且一般说的也很宽泛 不是特指后端
点赞
评论
收藏
分享
01-30 16:51
清华大学 Java
1月份过的挺高兴的,因为马上快过年了
1 月份过得挺高兴的,工作和生活都比较顺利。最让人期待的是春节快要到了,空气里弥漫着节日的气息。和家人团聚、准备年货、感受浓浓的年味,让整个月份都充满了温暖和期待。这个月,不仅收获了快乐,也感受到家的温馨和新年的希望。
1月小结:你过的开心吗?
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
1
21
分享
评论
提到的真题
返回内容
招聘动态
查看更多
27届简历点评
27届寒假/转正实习汇总
全站热榜
更多
1
...
AI 应用开发学习全景路线图
1.7W
2
...
双非大三生在家20小时写了个Agent开源项目
6113
3
...
大厂到底想要什么样的人???
5860
4
...
害怕被嘲笑就不去做了吗?
5562
5
...
字节的offer流程需要多久
3742
6
...
字节国际化广告后端一面
3675
7
...
字节日常实习二面
2286
8
...
小红书前端一面
2211
9
...
阿里社招一面
1969
10
...
字节日常实习三面
1848
创作者周榜
更多
正在热议
更多
#
在大厂上班是一种什么样的体验
#
6646次浏览
96人参与
#
机械人避雷的岗位/公司
#
41831次浏览
279人参与
#
程序员找工作至少要刷多少题?
#
12270次浏览
195人参与
#
12306一秒售罄,你抢到回家的票了吗?
#
1090次浏览
38人参与
#
我现在比当时_,你想录用我吗
#
5365次浏览
80人参与
#
过年最难忘的一件事
#
23044次浏览
174人参与
#
你最满意的offer薪资是哪家公司?
#
69464次浏览
349人参与
#
为了减少AI幻觉,你注入过哪些设定?
#
2529次浏览
94人参与
#
牛客AI体验站
#
4601次浏览
141人参与
#
AI Coding的使用心得
#
3386次浏览
89人参与
#
找工作的破防时刻
#
252993次浏览
1960人参与
#
刚入职的你踩过哪些坑
#
5225次浏览
110人参与
#
一张图晒一下你的AI员工
#
3555次浏览
81人参与
#
论秋招对个人心气的改变
#
7032次浏览
124人参与
#
关于春招/暑期实习,你想知道哪些信息?
#
5238次浏览
96人参与
#
黄金这个事上,你学到了什么
#
1200次浏览
36人参与
#
机械人你知道哪些单休企业
#
85372次浏览
428人参与
#
程序员能干到多少岁?
#
6613次浏览
100人参与
#
晒晒你司的新年福利
#
5266次浏览
80人参与
#
关于提前批我想问
#
267349次浏览
2303人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务