跳到主要内容

缓存穿透

2025年01月05日
柏拉文
越努力,越幸运

一、认识


缓存穿透 是指请求的数据既不在缓存中,也不在数据库中,导致请求直接穿透缓存访问数据库,导致后端数据库压力剧增。通常是恶意攻击或查询不存在的 key

二、原因


  1. 请求的数据不存在,缓存未命中。

  2. 恶意用户构造大量不存在的 key 进行攻击。

三、解决方案


3.1 缓存空值

对于数据库中不存在的数据,将其对应的结果(如 null 或特定标记)写入缓存,并设置短暂过期时间。 示例:SET key "null" EX 60

3.2 布隆过滤器(Bloom Filter)

  • 在缓存层之前增加布隆过滤器,用于快速判断 key 是否可能存在。

  • 不存在的数据会被直接过滤掉,减少对缓存和数据库的访问。

3.3 参数校验

在业务逻辑中对输入参数进行校验,过滤掉非法或异常请求。