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

缓存雪崩
同一时间key大量过期,导致redis无法请求的数据打在数据库上。或者redis宕机,导致数据库压力突增,进而导致库宕机,系统崩溃等问题。
均匀设置过期时间
如果要给缓存数据设置过期时间,应该避免将大量的数据设置成同一个过期时间。我们可以在对缓存数据设置过期时间时,给这些数据的过期时间加上一个随机数,这样就保证数据不会在同一时间过期。
互斥锁
当发现请求不在redis中就加互斥锁,保证接下来一样的请求不会走redis。
双key
对缓存数据采用两个key,主key有过期时间,备用key没有。
主key过期后,当请求主key时直接返回备用key的数据。
更新主key需要同时更新
后台更新缓存
redis宕机
- 采用redis集群
- 限流,服务熔断
缓存击穿
有些数据会频繁地被读取,如果过期会导致请求打到数据库上
- 缓存的缓存
- 热点数据过期前保活
- 互斥锁,返回零值或空值
缓存穿透
查询一定不存在的信息,可能时恶意攻击或输入错误。
- 检查非法请求
- 缓存空值、默认值
- 布隆过滤器