缓存异常三大问题:缓存雪崩、击穿、穿透?

缓存雪崩

同一时间key大量过期,导致redis无法请求的数据打在数据库上。或者redis宕机,导致数据库压力突增,进而导致库宕机,系统崩溃等问题。

均匀设置过期时间

如果要给缓存数据设置过期时间,应该避免将大量的数据设置成同一个过期时间。我们可以在对缓存数据设置过期时间时,给这些数据的过期时间加上一个随机数,这样就保证数据不会在同一时间过期。

互斥锁

当发现请求不在redis中就加互斥锁,保证接下来一样的请求不会走redis。

双key

对缓存数据采用两个key,主key有过期时间,备用key没有。

主key过期后,当请求主key时直接返回备用key的数据。

更新主key需要同时更新

后台更新缓存

redis宕机

  • 采用redis集群
  • 限流,服务熔断

缓存击穿

有些数据会频繁地被读取,如果过期会导致请求打到数据库上

  • 缓存的缓存
  • 热点数据过期前保活
  • 互斥锁,返回零值或空值

缓存穿透

查询一定不存在的信息,可能时恶意攻击或输入错误。