首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
Lyh0
2019-09-07 17:11
已编辑
厦门大学 Java
关注
已关注
取消关注
关于数据库和缓存一致性问题
关于数据库和缓存一致性问题,网上的说法大都是先更新数据库,再删除缓存。可是如果是 :
1.线程A更新数据库
2.线程B查询从缓存中得到旧数据
3.线程A让缓存失效。
这样线程B不就是得到脏数据吗??请问有大佬帮忙解答一下吗?
#MySQL#
提示
全部评论
推荐
最新
楼层
统行
西安石油大学 Java
先更新DB,在删除缓存,损失点一致性,虽然可能第一时间读不到最新的,但是逻辑没问题
点赞
回复
分享
发布于 2019-09-07 15:01
练绝活
阿里巴巴_大淘宝技术_研发工程师
https://coolshell.cn/articles/17416.html
点赞
回复
分享
发布于 2019-09-07 15:02
安静的小白
华东理工大学 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
yzltrs
江西财经大学 Java
应该是先删缓存再更新据库吧。。。我认为流程是:先把缓存的数据删了,然后更新数据库,最后重新注入缓存
点赞
回复
分享
发布于 2019-09-07 14:56
小度小度
南京大学 Java
感觉和事务的隔离性有关,四种隔离级别可以看下,如果隔离级别是脏读,那就有可能读到脏数据
点赞
回复
分享
发布于 2019-09-07 15:01
C.A.Y.P
五邑大学 Java
牺牲点一致性
点赞
回复
分享
发布于 2019-09-07 15:17
Lyh0
楼主
厦门大学 Java
如果是针对秒杀这种一致性要求很高的场景呢?我看慕课上面就是直接用redis单线程访问控制,然后用消息队列来实现最终一致性。可是这样做性能应该很低下吧?
点赞
回复
分享
发布于 2019-09-07 15:20
哈哈(ಡωಡ)hiahiahiamn
门头沟学院 Java
弄个操作顺序的队列
点赞
回复
分享
发布于 2019-09-07 16:48
这瓜保熟吗
华为_软件工程师
只有极高并发才可能出现楼主说的问题,上队列串行化可以解决
点赞
回复
分享
发布于 2019-09-08 09:31
还没有回复哦~
相关推荐
02-12 18:01
已编辑
中国科学技术大学 Java
26届被老师派去项目实习,还有机会找暑期实习吗
bg2本9硕,26科班,本来计划3月找暑期,6-8月暑期实习,现在因为实验室项目被派去深圳一中厂实习,计划实习六个月(2-8月),做的是大模型相关的,目前没有大模型相关基础,秋招也想找java开发的工作。如果一直在那边实习,暑期实习肯定没了,主要是担心实习经历不匹配加上公司title不大。我在想要不就是跟老师商量实习三个月(很可能不同意)然后找个java的暑期实习,不然的话就只能直接参加秋招了,大家有没有啥建议。
黑皮白袜臭脚体育生:
去了抓紧找文档偷,深信服这种级别的中厂文档建设都还行,要是部门内偷不到就多结交下搞Java部门的朋友,忍辱负重只为文档,偷到了再好好包装你就是实习六个月的Java特种兵
点赞
评论
收藏
分享
02-09 14:50
圣马家沟学院 测试工程师
AI哪家强
自从gpt横空出世以来,就走上了使用各种AI的不归路。因为有的文献实在是,看起来很麻烦。通义千问、文心一言、coplit、智谱清言除了主流的这几个,还有其他的。还使用过说是什么基于CHATGPT开发的能够帮助看文献的AI,当时使用经典问题,测试这几个AI,“蓝牙耳机坏了是去看耳科医生还是牙科医生”。然后发现,就gpt的回答靠谱一些。上图为文心一言的回答,好像,现在的也靠谱了。。。反正一年之前,是真的不靠谱,甚至有一段时间,我感觉gpt都不太行,现在就是使用gpt问一些问题,智谱清言看文献,真的强推。花钱开了gpt4,他看文献的能力都不如智谱清言。deepseek目前为止还没有遇见过回答不靠谱的...
聊聊我眼中的AI
点赞
评论
收藏
分享
2024-12-21 01:36
电子科技大学 Java
咋看不懂呢
牛客850385388号:
员工福利
查看图片
点赞
评论
收藏
分享
今天 14:42
大连医科大学 嵌入式软件开发
汇川技术 - 嵌入式软件工程师 - 面经(1)
-1、背景 岗位:【25提前批-联合动力】嵌入式软件工程师 工作职责: 硕士及以上学历,自动化、计算机、电气工程及其自动化等专业等相关专业; 有嵌入式软件编程经验,熟练掌握C/C++,有simulink应用、芯片驱动设计等开发经验者优先。 工作严谨细致,有责任心,有良好沟通能力,具备团队合作精神。 任职资格: 负责新能源汽车相关产品软件开发,汽车电子嵌入式软件设计、开发与测试工作 负责基于ARM、DSP等单板控制器的软件开发 负责软件功能的需求分析、设计及代码开发 协助解决产品市场问题、技术难点等。 时间线: 0705(投递) -> 0705(测评) -> 0729(一面)...
嵌入式软件名企笔/面试真...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
20
分享
评论
提到的真题
返回内容
招聘动态
查看更多
26届实习生双选会报名开启
26届实习软件笔试必刷题单
全站热榜
更多
1
...
腾讯实习生基地一面面经
2.9W
2
...
我和面试官有个约会
1.1W
3
...
快手Java日常实习一面
1.1W
4
...
一次失败找实习之旅
7309
5
...
代码与豹尾:一个做题家的赛博修仙启示录
5443
6
...
情人节还在刷牛客的,这辈子有了
4737
7
...
太好了!春招面试有救了!
3504
8
...
兄弟们,考上玉虚宫研究生了,选哪个导师啊
3457
9
...
实在智能日常一面(全程高能,无八股)
3411
10
...
deepseek用来写论文,真的强爆了……
3197
创作者周榜
更多
正在热议
更多
#
大疆今年的机械笔试难吗?
#
34341次浏览
405人参与
#
影石Insta360求职进展汇总
#
105682次浏览
933人参与
#
文科生还参加今年的春招吗
#
1553次浏览
20人参与
#
大疆的机械笔试比去年难吗
#
63234次浏览
575人参与
#
选择和努力,哪个更重要?
#
36097次浏览
387人参与
#
24届市场营销薪资爆料
#
8955次浏览
62人参与
#
一人推荐一个值得去的通信/硬件公司
#
160149次浏览
1729人参与
#
如果公司降薪,你会跳槽吗?
#
42307次浏览
305人参与
#
提前批的机械人,你们都有面试了吗
#
86118次浏览
929人参与
#
产品实习,你更倾向大公司or小公司
#
128593次浏览
1710人参与
#
产品薪资爆料
#
96625次浏览
814人参与
#
春招启动,你开始投递了吗?
#
43372次浏览
421人参与
#
大学四年该怎么过,才不算浪费时间?
#
3258次浏览
32人参与
#
秋招前后对offer的期望对比
#
220379次浏览
1648人参与
#
职场上哪些事情令人讨厌
#
12583次浏览
57人参与
#
机械人,你的第一份感谢信是谁给的
#
19846次浏览
257人参与
#
和牛牛一起刷真题
#
104896次浏览
2066人参与
#
华为工作体验
#
149198次浏览
1052人参与
#
你觉得机械有必要实习吗
#
33508次浏览
318人参与
#
2022毕业的你对23届的寄语
#
35021次浏览
533人参与
牛客网
牛客企业服务