缓存穿透
Chivas-Regal
发生的现象:随时间变化
- Redis
- 命中率越来越低
- CPU 占用激增
- 内存占用十分平稳
- 数据库
- 压力激增,崩溃
- 应用服务器
- 流量增大
原因是大量非正常的 key 访问,数据库中 null 的返回值在 Redis 中并未缓存,导致每次都要在数据库上找,通常是出现在错误访问或者黑客攻击。
解决方案:
- 缓存 null,但只能用作临时,需要定期清理,不然对内存占用很高
- 使用布隆过滤器在请求访问的各个位置做判断处理
- 监控 Redis 命中率,探测到攻击后对攻击来源做黑名单处理
- 对 key 加密,获取到请求后在后台做 key 校验判断是否合法