什么是缓存穿透?
缓存穿透是指查询一个根本不存在的数据。
由于缓存是不命中的,请求会穿透缓存层直接到达数据库。如果这种查询请求量很大(例如黑客攻击),数据库就会承受巨大的压力,甚至导致崩溃。
核心特征
- 缓存层无数据。
- 数据库也无数据。
常见成因
- 业务误操作:删除了某些数据,但前端或其他系统仍在持续请求。
- 恶意攻击:利用不存在的 ID 频繁发起请求。
常见解决方案
- 缓存空对象:即使数据库中没有该数据,也在缓存中存一个特殊值(如
null)并设置较短的过期时间。 - 布隆过滤器 (Bloom Filter):在请求到达缓存之前,先通过布隆过滤器判断数据是否存在。如果布隆过滤器判定不存在,直接返回。
- 参数校验:在接口层对请求参数进行严格校验,拦截非法请求。