Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

  • 缓存问题类

    • Redis 缓存击穿问题及解决方案
    • 缓存雪崩问题及解决方案
      • 缓存穿透及解决方案
      • 设计 Redis 的 key 和 value ,有哪些原则?
    • 多线程类

    • JVM 类

    • MySQL 类

    • Java 8 + 特性类

    • 其他技术类

    • 常见面试题
    • 缓存问题类
    刘博
    2025-12-28
    目录

    缓存雪崩问题及解决方案

    # 什么是缓存雪崩

    缓存雪崩是 “大量 Redis Key 在同一时间过期,或 Redis 服务宕机,导致所有请求穿透缓存,集中查询数据库,数据库因无法承受高并发而崩溃” 的问题。与击穿(单个热点 Key)不同,雪崩是 “批量 Key 失效” 或 “缓存服务不可用”,影响范围更大。

    # 解决方案

    • 1. 避免 Key 集中过期:
      • 过期时间加随机值:为每个 Key 的过期时间添加随机值(如expire(key, 300 + new Random().nextInt(60))),使 Key 的过期时间分散在 300-360 秒之间,避免同一时间大量 Key 过期。
      • 分层缓存:将缓存分为多层(如本地缓存 Caffeine + 分布式缓存 Redis),本地缓存设置较短过期时间,Redis 设置较长过期时间;当 Redis Key 过期时,先查本地缓存,再异步更新 Redis,减少数据库压力。
    • 2. 缓存服务高可用:
      • Redis 集群:部署 Redis 主从集群(1 主 N 从)+ 哨兵(Sentinel),主节点宕机时,哨兵自动将从节点提升为主节点,确保 Redis 服务不中断;
      • Redis Cluster:对于超大规模场景,部署 Redis Cluster(分片集群),将数据分散到多个主节点,即使某个主节点宕机,其他主节点仍可提供服务,降低单点故障影响。
    • 3. 降级与限流:
      • 服务降级:当 Redis 宕机或数据库压力过大时,通过降级策略返回默认值(如 “服务繁忙,请稍后重试”)或缓存的旧数据,避免数据库崩溃;
      • 接口限流:通过网关(如 Spring Cloud Gateway、Nginx)对接口设置限流阈值(如每秒 1000 次请求),超过阈值的请求直接拒绝,保护数据库。
    • 4. 数据持久化与快速恢复:
      • 开启 Redis 的 AOF(Append Only File)和 RDB(Redis DataBase)持久化,AOF 记录所有写操作,RDB 定期快照;当 Redis 服务崩溃时,可通过 AOF 或 RDB 快速恢复数据,减少缓存数据丢失。
    • 5. 熔断机制:
      • 集成熔断组件(如 Sentinel、Hystrix),当数据库的请求失败率超过阈值(如 50%)时,自动熔断数据库请求,直接返回缓存旧数据或默认值;当数据库恢复正常后,再逐渐恢复请求。

    上次更新: 12/30/2025
    Redis 缓存击穿问题及解决方案
    缓存穿透及解决方案

    ← Redis 缓存击穿问题及解决方案 缓存穿透及解决方案→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式