缓存穿透指的是:查询一个根本不存在的数据,缓存中没有、数据库中也没有,导致每次请求都直接打到数据库,缓存完全失效,可能被恶意利用压垮数据库。
思路:数据库查不到,也在缓存中存一个“空值”
key -> null(或特殊标记)
示例(Redis):
redis.set(key, "NULL", 5 * 60); // 缓存空值 5 分钟
✅ 优点:实现简单
⚠️ 注意:
思路:在访问缓存前先判断 key 是否可能存在
请求 -> 布隆过滤器
否 -> 直接返回
是 -> 查缓存 -> 查数据库
✅ 适合:
⚠️ 缺点:
在接口层拦截非法请求:
- ID <= 0
- 格式不合法
- 超出业务范围
✅ 成本低,必须做
防止恶意高频请求:
✅ 防止“穿透 + 雪崩”叠加
| 方案 | 防护能力 | 实现复杂度 | 推荐场景 |
|---|---|---|---|
| 缓存空值 | 中 | 低 | 通用 |
| 布隆过滤器 | 高 | 中 | 大数据量 |
| 参数校验 | 低 | 低 | 必做 |
| 限流 | 中 | 中 | 防攻击 |
生产环境最佳实践:
参数校验 + 缓存空值 + 布隆过滤器 + 限流
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。