缓存风险
缓存穿透
查询不存在的数据,缓存未命中,数据库也查不到,因此会持续查询数据库
原因
- 业务层操作不当
- 恶意攻击
解决方法
- 对参数进行合法性校验
- 如果业务不能避免,则将空值的key也进行缓存
- 布隆过滤器
- 判断元素是否在数组中,hash散列元素,判断分散的各个位
- 判断不在一定不在,判断在可能在
- 只能加不能减元素
缓存击穿
缓存中的热点数据忽然因为某种原因失效了,此时多个针对该key的请求同时发送过来。 就是说在失效之后查db到写回缓存的时间内,请求过多
原因
- 超时
- 缓存服务崩溃
解决方法
- 避免key同时失效
- 加锁:在判断key是否有值到写回缓存这个逻辑里加锁,锁之前再检查一次缓存
缓存雪崩
- 大量应用无法在缓存中处理,然后打入db
- 连锁反应
原因
- 缓存数据大量过期
- Redis宕机
解决方法
- 微调过期时间
- 服务降级,对于不重要的业务直接快速失败
- 流量控制,限流
- 保证Reis高可用