加载中...

穿透、击穿、雪崩是使用 Redis 等缓存保护数据库的架构中三种经典故障模式,名称相近但成因与对策不同,是后端面试与实战的高频主题。
请求查询的数据在缓存和数据库中都不存在,每次都直达数据库,恶意构造不存在的 key 可借此打垮存储。对策:对空结果也缓存(设置较短过期时间)、用布隆过滤器在入口拦截必然不存在的 key、加强参数校验。
某个热点 key 在过期瞬间,海量并发请求同时回源重建缓存,压力集中打到数据库。对策:互斥锁保证只有一个请求回源、热点数据设置逻辑过期由后台异步刷新、极热数据永不过期。
大量 key 在同一时间集中过期,或缓存服务整体宕机,请求洪峰整体涌向数据库。对策:过期时间加随机抖动错峰、缓存集群高可用(哨兵、集群模式)、多级缓存,以及数据库侧的限流降级兜底。
三者的共同思想是:任何时候都要避免「无保护地把流量放给最慢的存储层」。

登录 后参与讨论
暂无讨论,来发表第一条评论吧