Skip to main content

Redis

常见问题​

问题出现原因处理方案
缓存击穿1. 热点数据过期
2. 并发访问集中在同一时刻
1. 分布式锁控制并发,防止同一时间大量请求穿透到数据库
2. 设置热点数据永不过期,避免频繁失效
3. 缓存预热,设置随机过期时间,减少同一时刻失效的概率
缓存穿透1. 恶意请求不存在的键
2. 系统参数校验问题
1. 合理化参数校验,过滤非法请求
2. 对查询结果为空的key设置空值,防止反复查询数据库
3. 使用布隆过滤器拦截不存在的key(实现复杂,优先级较低)
缓存雪崩1. 大面积缓存失效
2. 宕机
1. 缓存过期时间分散化,避免同一时间大量key失效
2. 增加多级缓存(如本地缓存+Redis),提升容错能力
3. 使用熔断、限流机制保护系统
4. 部署Redis高可用,减少单点故障风险

说明:

  • 缓存击穿:指某个热点数据在缓存失效后,短时间内大量请求直接访问数据库,导致数据库压力骤增。
  • 缓存穿透:指请求的数据在缓存和数据库中都不存在,导致每次请求都要访问数据库。
  • 缓存雪崩:指大量缓存同一时间失效,导致大量请求直接访问数据库,可能引发系统崩溃。

参数配置建议​

  • blockWhenExhausted = false:连接池耗尽时直接抛出异常,避免线程阻塞。若设置为true,需保证maxIdle大于0。
  • 连接数maxTotal和maxIdle建议设置为同一数量级,推荐最大连接数4096。
  • 建议使用jedis作为客户端,因其支持拓扑刷新、xreadgroup等功能,且基于Netty异步实现,长连接可复用。
  • 合理设置超时时间:建立连接时间建议1000-5000毫秒;单次操作时间建议1000-5000毫秒。
  • 高可用部署建议:
    • 单实例哨兵模式:一主二从,三哨兵,跨两个机房,三台物理机。
    • 集群模式:三主三从,两个机房,每个机房六台物理机。
  • 写数据时,建议先更新数据库再删除缓存,或采用延迟双删策略,保证数据一致性。

补充说明:

  • 高可用部署建议跨机房、跨物理机器,确保独立电力和网络,提升容灾能力。