分布式是大型架构核心,下面我详解分布式缓存穿透@mikechen
什么是缓存穿透
缓存穿透,是指用户请求查询一个在缓存中和数据库中都不存在的数据。
由于缓存不命中,请求会穿透缓存层,直接到达数据库层。

为什么会发生缓存穿透
在高并发场景下,如果恶意攻击者或程序利用这种特性,构造大量不存在的 Key 发起查询。
所有的请求都会绕过缓存,直接访问数据库,导致数据库瞬间压力过大甚至宕机。

攻击者利用爬虫或特定工具,构造大量不合法的、在数据库中永不存在的 Key(例如,负数 ID、超大 ID 或格式错误的 Key)。
由于这些 Key 永远查不到数据,每次查询都会直接穿透到数据库,造成数据库资源的浪费甚至瘫痪。
缓存穿透的四大解决方案

1.布隆过滤器(Bloom Filter)
布隆过滤器是一种空间高效的概率型数据结构,用于判断某个键是否存在于集合中。
将所有合法的键预先加入布隆过滤器,查询时先检查过滤器返回“不存在”则直接拦截请求。
若返回“可能存在”,再访问缓存或数据库,布隆过滤器能显著减少无效请求对后端的冲击。
但存在假阳性率,需要根据业务规模与误判容忍度调优位数组与哈希函数数量。
2.缓存空结果(Null/Empty Cache)
当查询数据库返回空结果(即数据不存在)时,将该空结果写入缓存并设置较短的过期时间。
后续相同请求会命中缓存而不再访问数据库,从而缓解穿透问题。
此法实现简单,但需注意空结果缓存的过期策略与缓存容量,避免大量空键占用缓存资源。
3.接口校验与参数过滤
在请求入口,对参数进行严格校验(如格式、长度、范围、白名单/黑名单)。
及时拒绝明显非法或不合规的查询请求,从源头减少恶意或无效访问。
这一方法适用于攻击或异常流量的防护,与其它方法结合能提高整体防护能力,但无法替代对正常“合法但不存在”查询的处理。
4.限流与降级
通过限流策略(如令牌桶、漏桶或基于IP/用户的限流)控制请求速率,当流量异常时对部分请求进行拒绝或延迟。
同时对非关键功能实行降级,保护核心服务与数据库稳定。
限流与降级能在突发攻击或流量激增时快速缓解后端压力,但需要合理配置阈值并配合监控以避免影响正常用户体验。