跳到主要内容

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。
  • 连接数maxTotalmaxIdle建议设置为同一数量级,推荐最大连接数4096。
  • 建议使用jedis作为客户端,因其支持拓扑刷新、xreadgroup等功能,且基于Netty异步实现,长连接可复用。
  • 合理设置超时时间:建立连接时间建议1000-5000毫秒;单次操作时间建议1000-5000毫秒。
  • 高可用部署建议:
    • 单实例哨兵模式:一主二从,三哨兵,跨两个机房,三台物理机。
    • 集群模式:三主三从,两个机房,每个机房六台物理机。
  • 写数据时,建议先更新数据库再删除缓存,或采用延迟双删策略,保证数据一致性。

补充说明:

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