缓存雪崩
Chivas-Regal
发生后往往产生如下几个现象:
- 页面
- 408、500页面频繁出现
- 客户反复刷新获取数据
- 数据库
- 连接量激增
- 崩溃
- 重启无效,再次被冲爆
- Redis
- 服务器崩溃
- 集群崩溃
原因是短时间内大量缓存的key集体过期,导致大量并发请求直接访问数据库。
但数据库无法及时给出响应,造成大量的请求积压在 Redis 并超时,资源被严重占用导致 Redis 崩溃与集群坍塌。
紧接着再外层的应用服务器也积压请求导致崩溃。
解决方案:
- 针对该单一问题
- LRU 与 LFU 切换
- key 过期时间随机化,避免同时过期大量数据
- 热点 key 设置永久访问
- 定期分析即将过期的数据判断其是否需要延时
- 整体优化
- 增加页面静态处理
- 构建多级缓存(Nginx、Redis、ehcache...)
- 优化 MySQL 严重耗时业务
- 增加 Redis 性能监控,创建灾难预警机制
- 动态化客户端请求限流,根据当前处理能力来放开