缓存穿透
2025年01月05日
一、认识
缓存穿透 是指请求的数据既不在缓存中,也不在数据库中,导致请求直接穿透缓存访问数据库,导致后端数据库压力剧增。通常是恶意攻击或查询不存在的 key
。
二、原因
-
请求的数据不存在,缓存未命中。
-
恶意用户构造大量不存在的
key
进行攻击。
三、解决方案
3.1 缓存空值
对于数据库中不存在的数据,将其对应的结果(如 null
或特定标记)写入缓存,并设置短暂过期时间。
示例:SET key "null" EX 60
3.2 布隆过滤器(Bloom Filter)
-
在缓存层之前增加布隆过滤器,用于快速判断
key
是否可能存在。 -
不存在的数据会被直接过滤掉,减少对缓存和数据库的访问。
3.3 参数校验
在业务逻辑中对输入参数进行校验,过滤掉非法或异常请求。