Skip to main content

缓存风险

缓存穿透

查询不存在的数据,缓存未命中,数据库也查不到,因此会持续查询数据库

原因

  • 业务层操作不当
  • 恶意攻击

解决方法

  • 对参数进行合法性校验
  • 如果业务不能避免,则将空值的key也进行缓存
  • 布隆过滤器
    • 判断元素是否在数组中,hash散列元素,判断分散的各个位
    • 判断不在一定不在,判断在可能在
    • 只能加不能减元素

缓存击穿

缓存中的热点数据忽然因为某种原因失效了,此时多个针对该key的请求同时发送过来。 就是说在失效之后查db到写回缓存的时间内,请求过多

原因

  • 超时
  • 缓存服务崩溃

解决方法

  • 避免key同时失效
  • 加锁:在判断key是否有值到写回缓存这个逻辑里加锁,锁之前再检查一次缓存

缓存雪崩

  • 大量应用无法在缓存中处理,然后打入db
  • 连锁反应

原因

  • 缓存数据大量过期
  • Redis宕机

解决方法

  • 微调过期时间
  • 服务降级,对于不重要的业务直接快速失败
  • 流量控制,限流
  • 保证Reis高可用

缓存污染