首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
暂无评论,快来抢首评~
相关推荐
11-19 09:23
复旦大学 Java
大厂系列:Redis八股文,速速收藏(一)
1. Redis是什么?简述它的优缺点?Redis本质上是一个Key-Value类型的内存数据库,很像Memcached,整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value 数据库。优点:读写性能极高, Redis能读的速度是110000次/s,写的速度是81000次/s。支持数据持久化,支持AOF和RDB两种持久化方式。支持事务, Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事...
点赞
评论
收藏
分享
11-12 16:04
大连理工大学 Java
金山wps服务端一面
1.自我介绍2.类加载过程3.JVM内存区域4.垃圾回收机制与垃圾回收器5.HTTP1.1和HTTP2.0的区别6.网络模型7.TCP和HTTP分别属于哪一层8.TCP四次挥手过程,为什么需要等待2MSL呢9.ThreadLocal的原理,为什么会内存泄漏呢10.Mysql索引常用的数据结构是什么?11.B+树和B树相比优势是什么?12.索引中存放的数据是什么?是主键值还是索引列的值?13.索引失效的场景14.什么是聚簇索引?什么是二次索引15.缓存穿透是什么?解决方案有什么16.redis速度快的原因是什么?17.redis是单线程的,他能避免进程上下文切换吗?18.redis中跳表是什么?有什么优点?时间复杂度是多少?19.redis中分布式锁如何实现?20.redis中指令是原子操作吗?安全吗?21.redis中使用String保存一个图片的二进制码,末尾可能会有‘/0’,那么后续读取可以恢复图片吗?22.项目中mysql与redis缓存一致性如何保证的?23.反问
查看23道真题和解析
点赞
评论
收藏
分享
11-22 10:14
复旦大学 Java
大厂系列:Redis八股文,速速收藏(八)
71.Redis 6.0 采用多线程后,性能的提升效果如何?Redis 作者 antirez 在 RedisConf 2019 分享时曾提到:Redis 6 引入的多线程 IO 特性对性能提升至少是一倍以上。国内也有大牛曾使用 unstable 版本在阿里云 esc 进行过测试,GET/SET 命令在 4 线程 IO 时性能相比单线程是几乎是翻倍了。介绍下Redis的线程模型Redis的线程模型包括Redis 6.0之前和Redis 6.0。下面介绍的是Redis 6.0之前。Redis 是基于 reactor 模式开发了网络事件处理器,这个处理器叫做文件事件处理器(file event ha...
点赞
评论
收藏
分享
11-21 19:19
复旦大学 Java
大厂系列:Redis八股文,速速收藏(七)
61.Redis内存淘汰策略Redis是不断的删除一些过期数据,但是很多没有设置过期时间的数据也会越来越多,那么Redis内存不够用的时候是怎么处理的呢?答案就是淘汰策略。此类的当Redis的内存超过最大允许的内存之后,Redis会触发内存淘汰策略,删除一些不常用的数据,以保证Redis服务器的正常运行。Redisv4.0前提供 6种数据淘汰策略:volatile-lru:利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)volati...
点赞
评论
收藏
分享
11-22 10:18
复旦大学 Java
大厂系列:Redis八股文,速速收藏(九)
81.介绍下Redis Sentinel(哨兵)?主从模式下,当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这种方式并不推荐,实际生产中,我们优先考虑哨兵模式。这种模式下,master 宕机,哨兵会自动选举 master 并将其他的 slave 指向新的 master。Redis Sentinel是社区版本推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel集群和Redis数据集群。其中Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现、故障自动转移、配置...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
1
21
分享
评论
提到的真题
返回内容
招聘动态
查看更多
成方金融科技有限公司
全站热榜
更多
1
...
TCP/IP高频面试题--可爱图片版
6336
2
...
快手日常实习面经(已oc)
2674
华为开奖交流
热聊中
3
...
兄弟们走路不要刷牛客😭
1795
4
...
回顾下25年,感想颇多
1111
5
...
饭局上怒怼不讲理老登
872
6
...
要去实习吗?
768
7
...
数字马力长沙 ai 岗二面 12.5
704
8
...
今年的校招薪资情况竟然是这样....
696
9
...
美团一面秒挂
653
10
...
数字马力Java后端秋招面经
594
创作者周榜
更多
正在热议
更多
#
uu们,春招你还来吗?
#
15584次浏览
103人参与
#
实习要如何选择和准备?
#
125396次浏览
1475人参与
#
百融云创求职进展汇总
#
328次浏览
0人参与
#
哪一瞬间让你觉得“这班不如不上”
#
13640次浏览
167人参与
#
2025年终总结
#
16605次浏览
260人参与
#
工作前VS工作后,你的心态变化
#
15437次浏览
172人参与
#
实习,不懂就问
#
133912次浏览
1240人参与
#
国企和大厂硬件兄弟怎么选?
#
138352次浏览
1671人参与
#
硬件兄弟们 甩出你的华为奖状
#
117670次浏览
701人参与
#
第一份工作能做外包吗?
#
87753次浏览
586人参与
#
毕业租房也有小确幸
#
148209次浏览
4525人参与
#
记录实习开销
#
169442次浏览
661人参与
#
为了去实习,我赌上了___
#
23653次浏览
213人参与
#
面试紧张时你会有什么表现?
#
16333次浏览
135人参与
#
高薪高压 vs 低薪wlb,你怎么选?
#
14184次浏览
154人参与
#
软开人,秋招你打算投哪些公司呢
#
168498次浏览
1282人参与
#
生物制药的同学已经投递多少份简历了
#
14595次浏览
52人参与
#
父母对你找工作是助力还是阻力?
#
14933次浏览
219人参与
#
学历or实习经历,哪个更重要
#
203431次浏览
1081人参与
#
Offer比较,你最看重什么?
#
241341次浏览
1486人参与
#
一人推荐一个值得做的项目
#
11303次浏览
168人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务