什么是缓存穿透?

缓存穿透是指查询一个根本不存在的数据。

由于缓存是不命中的,请求会穿透缓存层直接到达数据库。如果这种查询请求量很大(例如黑客攻击),数据库就会承受巨大的压力,甚至导致崩溃。

核心特征

  • 缓存层无数据。
  • 数据库也无数据。

常见成因

  1. 业务误操作:删除了某些数据,但前端或其他系统仍在持续请求。
  2. 恶意攻击:利用不存在的 ID 频繁发起请求。

常见解决方案

  1. 缓存空对象:即使数据库中没有该数据,也在缓存中存一个特殊值(如 null)并设置较短的过期时间。
  2. 布隆过滤器 (Bloom Filter):在请求到达缓存之前,先通过布隆过滤器判断数据是否存在。如果布隆过滤器判定不存在,直接返回。
  3. 参数校验:在接口层对请求参数进行严格校验,拦截非法请求。