经常面试被问到缓存和 db 数据一致性的问题

2020-07-29 11:42:57 +08:00
 noble4cc

比如说缓存和数据库保持数据一致性,感觉只要是用缓存,这个一致性永远无法保证实时一致性

还有问先更新数据库再更新缓存,更新缓存失败了怎么办,感觉使用缓存永远无法保证缓存永远的一致性呀,总会有时间差,要要求强一致性就别用缓存了

5114 次点击
所在节点    Java
27 条回复
huobazi
2020-07-30 16:32:06 +08:00
号称 9999999 想想为什么涅?
zichen
2020-07-30 18:21:48 +08:00
最稳妥的方式就是写进程写数据库然后删缓存,读进程读缓存失败再读数据库再回写缓存。
zichen
2020-07-30 18:24:37 +08:00
@noble4cc 淘汰缓存失败可以放入消息队列,用定时任务做补偿。
Octopvs
2020-07-30 20:26:53 +08:00
@xkeyideal 用布隆过滤器解决击穿
xkeyideal
2020-07-31 08:55:23 +08:00
@Octopvs 这是什么骚操作,从来没听过,能解释一下,请教如何使用
noble4cc
2020-07-31 14:25:47 +08:00
@zichen 对,更新缓存和淘汰缓存都可以,淘汰缓存更方便,但是对方肯定会问你淘汰缓存失败了不就 db 和缓存不一致了吗
vanpeisi7
202 天前
@Octopvs 多个线程同时更新,A 和 B 都更新这种问题也不行。1.A 获取缓存 ; 2.B 获取缓存; 3.B 更新数据库、删除缓存; 4.A 更新数据库(用的数据是早先从缓存获取的),删除缓存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693990

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX