Redis - 缓存

缓存雪崩

大量缓存数据在同一时间过期,或者 Redis 宕机时,大量 Redis 请求无法处理,导致直接访问数据库,从而引起一系列连锁反应。这就是「缓存雪崩」

解决方案

  • 均匀设置过期时间,例如在同时设置大量 key 过期时间时,添加随机数
  • 加锁,保证同一时间只有一个请求来构建缓存
  • 后台更新缓存,让缓存持续有效
  • 服务熔断或限流

缓存击穿

某个热点数据过期,大量请求访问热点数据时无法从缓存读取,导致直接访问数据库,称为「缓存击穿」

解决方案

  • 加锁,保证只有一个请求来构建缓存
  • 后台更新缓存,让缓存持续有效

缓存击穿

当一个数据缓存中和数据库中都不存在时,每次请求都需要先请求缓存,在请求数据库,并且由于数据不存在导致无法构建缓存,称为「缓存穿透」

解决方案

  • 业务侧限制非法请求
  • 缓存空值或默认值
  • bloom filter
Licensed under CC BY-NC-SA 4.0
最后更新于 Nov 12, 2020 00:00 UTC