加载中...

缓存穿透指查询一个数据库中根本不存在的数据:缓存必然未命中,请求便一路「穿透」到数据库;若此类请求量大(尤其是恶意构造随机键的攻击),数据库会承受本应由缓存挡住的全部压力。
缓存击穿是「存在的热点键过期瞬间」被打穿,缓存雪崩是「大量键同时失效」,而穿透的本质是数据不存在,缓存无从命中,三者成因与对策不同。
常用手段有三类:一是缓存空值——对查不到的键也写入一个短 TTL 的空标记,拦截后续相同请求,代价是可能缓存大量无意义键;二是布隆过滤器——把全量存在的键预先装入 Bloom Filter,请求先过滤,「一定不存在」的直接拒绝,存在少量误判但不漏判;三是入口校验与限流——对明显非法的键格式(如负数 ID)在网关层直接拦截,并对异常来源限速。
生产中通常组合使用:参数校验兜底、布隆过滤器挡大头、空值缓存处理长尾。

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