缓存雪崩是什么
背景
Redis的缓存雪崩是指在某一时间段内,大量缓存数据同时失效,导致大量请求直接打到数据库上,造成数据库压力激增,甚至可能导致数据库宕机。这种情况类似于雪崩效应,突然的大量请求涌入数据库,系统无法承受。
缓存雪崩的原因
- 大量缓存同时过期:如果大量缓存数据设置了相同的过期时间,到了某个时间点,这些缓存会同时失效。
- 缓存服务器宕机:Redis服务器出现故障,所有缓存数据瞬间失效。
- 系统重启:系统维护或意外重启导致所有缓存失效。
- 热点key失效:某些被频繁访问的key失效,导致大量请求直接打到数据库。
缓存雪崩的解决方案
- 分散缓存过期时间:设置缓存时,增加一个随机值,避免大量缓存同时过期。可通过均匀设置过期时间解决,即让过期时间相对离散一点。如采用一个较大固定值+一个较小的随
机值。 - 缓存预热:在系统上线前,预先加载可能会被大量访问的数据到缓存中。
- 多级缓存:使用本地缓存和分布式缓存相结合的方式,当分布式缓存失效时,本地缓存可以作为备份,减少对数据库的直接压力。
- 限流和降级:在高并发情况下,限制请求频率,保证系统在承受范围内运行。可以通过算法(如令牌桶、漏桶等)实现限流。