1. Redis-缓存雪崩

雪崩 是指大量雪体崩塌,缓存雪崩是指同一时间大面积的缓存失效,从而导致大量请求直接落到数据库上,导致数据库压力过大甚至崩溃。

image-20240921002420207

2. 雪崩场景

发生缓存雪崩的情况一般有:

  • 单点故障
  • 大量缓存同一时间失效

3. 解决方案

针对 Redis 单点故障,一般可以使用高可用部署方式,比如哨兵、集群模式。针对大量缓存同一时间失效的情况,一般可以采取以下措施:

  1. 设置不同的过期时间:为缓存数据设置随机的过期时间,避免大量缓存数据在同一时间失效,从而减少数据库的压力。
  2. 缓存数据预热:在系统启动或缓存服务启动时,提前将一些预计会被频繁访问的数据加载到缓存中,这样可以减少在高并发访问时,因为缓存中没有数据而频繁访问数据库的情况。
  3. 使用多级缓存机制:结合使用本地缓存和分布式缓存,当分布式缓存失效时,本地缓存可以作为一个备份,减少对数据库的直接压力。
  4. 预加载和预热缓存:在缓存即将过期前,后台异步更新缓存数据,这样可以避免大量请求同时击中数据库。
  5. 动态调整缓存策略:根据系统负载和业务重要性动态调整缓存失效时间和限流策略,在系统负载较低时增加缓存失效时间,负载较高时减少缓存时间,并合理设置限流阈值,保护后端服务。
  6. 实现高可用的缓存系统:通过部署缓存服务的高可用集群,确保缓存服务的稳定性,避免因单点故障导致的缓存雪崩。
  7. 使用分布式锁:在缓存数据过期时,使用分布式锁确保只有一个请求去数据库查询数据并回写缓存,其他请求等待或重试。
  8. 后台更新机制:启动后台进程定时更新缓存中的数据,保证数据永远不会过期。