解决方案:使用Redis Sentinel + 集群模式部署Redis,实现主从复制和自动故障转移;热点key隔离+限流熔断;缓存预热+随机过期时间防雪崩;二级缓存+布隆过滤器防穿透;异步线程池+本地缓存兜底防击穿。通过这些组合拳,高并发QPS轻松破10w,系统稳定性提升99.99%。
CSDN博客
缓存雪崩:大量key同时失效导致请求全部打到DB。为避免雪崩,需要设置不同的过期时间,比如随机化TTL,或者设置永不过期key(逻辑过期)。同时开启Redis集群,单点故障不影响整体。
缓存击穿:热点key失效,大量请求瞬间打到后端。为解决,使用互斥锁(SETNX)或本地热点缓存。推荐使用本地ConcurrentHashMap记录热点key,定时刷新到Redis。
缓存穿透:查询不存在的数据,导致大量无效请求。为防穿透,使用布隆过滤器提前判断key是否存在,减少无效请求到后端。
博客园文章
Redis高并发优化新思路:1. Pipeline批量操作减少RTT;2. Lua脚本原子执行复杂逻辑;3. 读写分离,主节点写,从节点读;4. 热点数据多级缓存(L1本地L2 Redis L3 DB)。
雪崩解决方案:预热缓存 + 随机过期时间 + 熔断器(Hystrix/Sentinel)。击穿:分布式锁(Redisson)。穿透:布隆+空值缓存(TTL短)。
阿里云开发者社区
在高并发场景下,Redis单机瓶颈明显。采用Redis Cluster分片存储,数据自动sharding。结合Twemproxy或Codis做代理层,平滑扩容。
解决雪崩:key设计带随机后缀,如user:123:rand123,TTL随机。击穿:使用本地缓存+双重检查锁。穿透:布隆过滤器 + 接口参数校验。
知乎专栏
新思维:Redis + Canal实时同步MySQL binlog,实现最终一致性缓存更新,避免缓存一致性难题。高并发下,消息队列(如Kafka)异步化缓存更新,削峰填谷。
雪崩防护:多级熔断 + 降级策略。击穿:热点key预加载到JVM本地缓存。穿透:压缩空结果缓存。
掘金文章
代码示例防击穿:public String getWithMutex(String key) { String value = redis.get(key); if (value != null) return value; if (redis.setnx(key + "_lock", "1")) { value = db.get(key); if (value != null) redis.set(key, value, 300); redis.del(key + "_lock"); } return value; }
雪崩:@Cacheable + 随机TTL。穿透:BloomFilter.contains(key) ? redis.get(key) : null;
腾讯云社区
突破瓶颈:Redis 6.0+ IO threading模型,多线程处理网络IO。结合RocksDB持久化引擎,AOF重写优化。集群模式下,Gossip协议自动发现,提升稳定性。
高并发实战:限流(Redis + Lua脚本令牌桶),降级(本地fallback),监控(Prometheus + Grafana)。
FAQ:
Q: Redis雪崩怎么彻底解决?
A: 随机TTL + 预热 + 集群部署 + 熔断。
Q: 缓存击穿和穿透区别?
A: 击穿是热点key失效瞬间大流量,穿透是无效key持续查询。
Q: 高并发下Redis怎么扩容?
A: 用Cluster模式,动态添加节点,数据自动迁移。
Q: 本地缓存和Redis怎么结合?
A: L1本地Caffeine(高性能),L2 Redis(持久),双写双读。
Q: 缓存一致性怎么保证?
A: Canal + MQ异步更新,最终一致性。