35|缓存问题:怎么解决缓存穿透、击穿和雪崩问题?
缓存穿透
缓存击穿
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了缓存穿透、击穿和雪崩问题,并提供了解决方案。对于缓存穿透,作者建议采用回写特殊值和使用布隆过滤器的方法来解决。而对于缓存击穿问题,建议采用singleflight模式。针对缓存雪崩问题,作者提出了合理设置缓存过期时间和采用多级缓存的解决方案。此外,文章还提到了限流的作用,以及集群互为备份的亮点方案。这些解决方案对读者在面对实际问题和面试准备中都具有一定的参考价值。文章内容丰富,涵盖了缓存问题的多个方面,为读者提供了全面的技术指导。
《后端工程师的高阶面经》,新⼈⾸单¥59
全部留言(7)
- 最新
- 精选
- 黑客不够黑亮点方案中跨云厂商使用redis是不是欠妥?考虑过网络延迟吗?使用缓存一般都在局域网内,夸厂商,极端情况跨地域,如果不上专线,网络延迟可能还不如查数据库来的快;中间件、数据库这些基础设施不应公网访问,就算夸机房也会拉专线保证低延迟
作者回复: 使用 Redis 有些时候不仅仅是为了查询性能,还是为了保护数据库。也就是说即便你考虑到跨网络跨地域查询很快,但是只要是查询 Redis,数据库就不会被查询压垮。
2024-02-27归属地:江苏 - nadream需要专门维护布隆过滤器吗?每次有数据新增了,都要往布隆过滤器中写入呢
作者回复: 是的。如果不想同步维护,你借助 Canal 之类的也可以,就是会产生更多的假阳性。 部分失败也不要紧,因为撑死了就是到了唯一索引那里。
2024-01-26归属地:浙江 - Geek_3d0fe8那个备份集群数据如果不同步的话,直接切过去不会有问题吗
作者回复: 没啥太大的问题,就是一瞬间缓存上都没数据,都会落到数据库上。你做好数据库上的保护工作就可以了。等后续缓存重建起来就可以了。
2023-12-13归属地:广东 - seckiller有Java版本的singleflight实现吗
作者回复: 我还真没用过,但是开源的是有的,你在 github 上线随便搜索就能找到。
2023-10-09归属地:上海2 - 波多黎各仔请教下老师,在真实的场景下,真的会采取上述说的几个基本解决方案吗?我是感觉做好限流就好了啊,比如说,缓存穿透的解决方案是给个默认值,但是攻击者可以找个没有缓存的接口来攻击,那样就没辙了。
作者回复: 如果你的服务本身,不存在数据库查询扩散的问题,那么服务直接限流就可以了。也就是说,调用你的服务一次,只会读缓存一次。那么有一些批量接口是不满足这个条件的。当然这也是有前提条件的,就是你的数据库在正常流量全部缓存未命中的时候,能够撑住。但是高并发服务也是不满足这个前提的。 正常来说,我至少会利用 ORM 来搞个限流,直接基于本地内存的限流就够了。只有在一些很罕见的场景我才会用更加复杂的方案。毕竟我也是一个懒人,不出 BUG 谁去管。
2023-09-13归属地:江苏 - Johar老师,redis集群一般都是cluster或者sentinel方式部署,主节点故障,自动切换到从节点就行,你说的是不是机房故障?
作者回复: 对,整个不可用!
2023-09-08归属地:重庆 - peter请教老师几个问题: Q1:Java对布隆过滤器有缺省实现吗?拿来就用的那种。 Q2:MySQL一般能承受多大的QPS? Q3:系统在设计的时候,需要考虑黑客攻击吗?比如我准备开发一个网站,除了考虑正常并发以外,还需要考虑黑客攻击的流量吗?
作者回复: 1. 直接调用 Redis API 就可以,低版本 Redis 就得自己手写了; 2. 这个看你的机器性能 3. 需要,一般都需要。你要相信互联网每一个人都不怀好意。
2023-09-08归属地:河南2