33|缓存模式:缓存模式能不能解决缓存一致性问题?
面试准备
基本思路
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了不同的缓存模式及其在数据一致性方面的表现。文章首先强调了面试准备的重要性,建议收集公司内部关于缓存模式的信息。接着详细介绍了缓存模式的基本思路,包括 Cache Aside、Read Through 和 Write Through。对于每种模式,文章分析了其优缺点以及在数据一致性方面的表现,并提出了相应的异步方案和亮点。最后,文章总结了每种模式的适用场景和注意事项,为读者提供了全面的缓存模式知识。通过本文的总结,读者可以快速了解不同缓存模式的特点和应用场景,为解决实际问题提供了有力的参考。文章内容丰富,涵盖了多种缓存模式及其在数据一致性方面的表现,为读者提供了全面的缓存模式知识。文章还提到了使用装饰器模式实现缓存模式的亮点方案,以及面试思路总结和思考题,为读者提供了更多实践和思考的机会。
《后端工程师的高阶面经》,新⼈⾸单¥59
全部留言(9)
- 最新
- 精选
- 一弦一柱思华年其实readThrough/writeThrough只不过是在cache aside基础上将一些操作封装成一个函数了,但本质上没啥区别。可以这么理解吗
作者回复: 对。本身这些缓存模式都差不多。
2023-12-28归属地:广东4 - peter请教老师两个问题: Q1:Cache Aside的第一个图,写入数据库的时候,为什么缓存返回OK? Q2:SingleFlight模式,谁来控制线程?根据什么来选择一个访问的线程?
作者回复: 啊啊,画图事务,我联系小编改改!
2023-09-04归属地:河南21 - NullPointerExceptionwrite through 我看网上更新缓存和数据库是在一个事务中,这样应该没有一致性问题吧?
作者回复: 有。你更新缓存成功了,但是数据库事务提交失败了,怎么办?
2023-12-14归属地:上海 - Geek_fef55b老师,请问一下,在Write Through模式中让缓存自己去更新数据库这个操作,是如何实现的呀?
作者回复: 调用一下 DB 就可以。如果你想设计良好的,你可能需要有一个 Store(key, val) 的接口,然后这个接口的实现就是 DB 插入到数据库。
2023-11-23归属地:北京 - 锅菌鱼老师,分布式Singleflight的有什么最佳实践的实现方案吗
作者回复: 这个在 GO 里面有一个自带的,还是很好用的。在 JAVA 那边的话,得找找开源框架,我几年没写 JAVA,已经不太记得了。
2023-10-08归属地:广东2 - Geek8004Singleflight为啥之歌模式要加分布式锁呀,redis不是单线程的吗,那我理解这种读的写的请求会在等待队列里面排队呀
作者回复: 这个是为了避免一台实例有多个线程去抢分布式锁。就好比,你高三这一个年级有十个班。现在有一种比赛,如果你说任何人都可以报名参加,那么就是十个班的所有学生一起去抢夺金牌。 引入 singleflight 的意思就是,你每个班先自己内部比一比,选出一个,那么在整个年级上,就是十个人在抢夺金牌。
2023-09-14归属地:中国香港 - Geek8004让缓存去更新数据库,然后缓存自己删除自己的数据. 这个怎么实现的,没这么玩儿过. 缓存里面没有菜做的空间呀,一般都是业务里面才能写代码,发指令吗? redis怎么更新db? 监听相关事件? 还是怎么地. 老师求指点
作者回复: 你的缓存中间件帮你封装,我在 Beego 的 Cache 里面让我的小伙伴实现了。你可以去看看
2023-09-11归属地:日本 - itschenxiangCache Aside有文中这种广义的定义吗?facebook论文和网上提到的Cache Aside策略都非常具体:更新时,先更新DB,再删除缓存。
作者回复: 我不觉得,Aside 这里面包含了一定要删除缓存。 个人认为,Aside 强调的是,我缓存也是作为一个独立的数据源。
2023-09-04归属地:广东 - shikamaru老师,“Write Through 没有要求先写数据库还是先写缓存,不过一般也是先写数据库”这句存疑,Read/Write Through 读写都是先操作cache才对呀,不然不符合“Read/Write Through”的字面意思2024-03-14归属地:四川