首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
09-18 14:40
门头沟学院 Java
面完之后还是等待面试是怎么回事
多益网络为什么一面完还是等待面试啊,这是过了还是挂了啊
哆嗐网络受缢人:
多在小红书 知乎之类的平台看看大家的评价,看看公司是如何对待应届生和老员工的吧。或者看看我的主页😭
我的秋招日记
点赞
评论
收藏
分享
09-14 15:45
成都理工大学 Java
差旅壹号面经(一面)已过
1. 自我介绍2. 实习经历,期间主要做的项目,业务流程讲一下3. Java 基本的数据类型4. Java 集合类型5. try-catch-finally执行顺序6. hashmap 常用的方法有哪些7. 有一个学生成绩表,要求查询学生的总成绩8. MySQL的缓冲池介绍一下(这个不会)9. 创建线程的几种方式10.MySQL事务的特性(ACID)11.你觉得你自己的优缺点是什么12.有没有女朋友,是不是本地人然后就是反问环节,我大概没什么要问的,然后直接就跟我说一面通过了,二面时间后面会通知(我还挺想线下面的,结果说是线上)总之是秋招第一面,感觉还行()
查看12道真题和解析
点赞
评论
收藏
分享
09-24 10:21
门头沟学院 Java
多益9.24 游戏客户端一面
自我介绍1.拷打项目 (黑马点评)数据缓存一致有什么其他方法实现分布式锁保证线程安全,还有什么其他方法实现什么是乐观锁,用乐观锁会有什么问题用什么方法降低了内存占用,对项目有没有做过内存布局检测2.操作系统,进程加载到操作系统的内存占用情况3.java代码到可执行文件的过程,需要哪些步骤4.jvm如何判断一个对象已经死了5.数据结构,什么是平衡二叉树,什么是二叉树排序,快排时间复杂度6.算法题,求一个集合的全部子集凉凉了,怎么跟我背的一点不一样
查看9道真题和解析
点赞
评论
收藏
分享
09-21 11:14
中国运载火箭技术研究院 Java
边实习边秋招
瓦日啊,公司开发没一个正职的,全是实习生,但是我争取了个转正offer,已经发意向了,要不要跑路啊
点赞
评论
收藏
分享
09-17 23:16
已编辑
门头沟学院 大数据开发工程师
多益网络一面
大数据开发(研发)岗(面试官很好是我太菜)1.问实习(学到了什么之类的)2.介绍项目3.项目中用的Hive,问我用的外部表还是内部(包是外部的,问就是外部安全)4.最熟悉哪个java集合(HashMap)(这个问题别人的面经也有准备准备吧我看了但是没记住)5.应用场景是啥6.它线程安全不7.String name="xxx"创建了几个对象存储在哪8.mysql主键和唯一索引有啥区别9.内连接是干啥的(交集)10.集群是自己搭建的不(包的老弟包的)11.hive的元数据搁哪放(metastore)12.Hadoop用的哪个版本啊(我说的是3x)13.问我HDFS,介绍一下我说...
发面经攒人品
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
1
21
分享
评论
提到的真题
返回内容
招聘动态
查看更多
字节跳动火山引擎
2026校园招聘
联想
2026届校园招聘
字节跳动
2026校园招聘
联想
26届AI专项|内推码NK2026
快手
2026届校园招聘
联想
2026届校园招聘
完美世界
全站热榜
更多
1
...
那个敢跟leader对线的实习生,现在怎样了
2354
2
...
上班还能尸体回温。。。
2087
3
...
数字马力一面(已挂)
1969
4
...
数字马力 一面
1777
5
...
实习才知道原来攒钱这么不容易(给新人小白)
1702
6
...
27找实习,简历求拷打
1527
7
...
字节业务中台后端开发一面
1422
8
...
数字马力一面
1384
9
...
美团是WLB吗?说说我一年多的感受!
1361
10
...
嵌入式开始捞人的企业
1321
创作者周榜
更多
正在热议
更多
#
同bg的你秋招战况如何?
#
170796次浏览
996人参与
#
扒一扒那些奇葩实习经历
#
124816次浏览
1094人参与
#
360集团校招
#
17650次浏览
144人参与
#
今年秋招是回暖还是遇冷
#
26834次浏览
171人参与
#
去哪儿求职进展汇总
#
144965次浏览
994人参与
#
你实习是赚钱了还是亏钱了?
#
25351次浏览
224人参与
#
京东开奖
#
454626次浏览
2535人参与
#
毕业论文进行时
#
4420次浏览
68人参与
#
面对逼签的应对技巧
#
4773次浏览
28人参与
#
我来点评面试官
#
13284次浏览
100人参与
#
牛友的国庆旅行碎片
#
20304次浏览
124人参与
#
秋招开始捡漏了吗
#
70833次浏览
503人参与
#
找工作八股要背到什么程度?
#
15007次浏览
232人参与
#
用一句话形容你的团队氛围
#
15893次浏览
170人参与
#
三一集团提前批进度交流
#
40914次浏览
229人参与
#
工作后,谈恋爱还和学生时代一样吗?
#
40479次浏览
377人参与
#
上班后,才发现大学__白学了
#
13281次浏览
97人参与
#
你找工作是从容有余 or 匆忙滚爬?
#
9270次浏览
83人参与
#
你的领导最像哪种动物,为什么?
#
25178次浏览
136人参与
#
阿里云工作体验
#
32805次浏览
108人参与
#
职场破冰,你们都聊什么?
#
30257次浏览
154人参与
#
海康威视求职进展汇总
#
533007次浏览
3707人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务