数据库服务器奔溃
- 缓存击穿的现象
- 系统平稳运行过程中,数据库连接量瞬间激增
- redis 服务器无大量key 过期,redis 内存平稳,无波动
- redis 服务器CPU 正常
- 数据库崩溃
- 问题排查
- redis 中某个key过期,该key访问量巨大
- 多个数据请求从服务器直接压到redis后,均为命中
- redis 在短时间内发起了大量对数据库中同一数据的访问
- 问题分析
- 单个key 高热数据
- 但是该key 过期
解决方案(术)
- 预先设定
以电商为例,每个商家根据商铺等级,指定若干款主打商品,在购物节期间,加大此类信息
key的过期时长
注意:购物节不仅仅指当天,应该包括后续若干天,访问峰值呈现逐渐降低的趋势
- 现场调整
监控访问量,对自然流量激增的数据延长过期时间或设置为永久性key
- 后台刷新数据
启动定时任务,高峰期来临之前,刷新数据有效期,确保不丢失
- 二级缓存
设置不同的失效时间,保障不会被同时淘汰就行
- 加锁
分布式锁,防止被击穿,但是要注意也是性能瓶颈,慎用!
总结
缓存击穿就是单个高热数据过期的瞬间,数据访问量较大,未命中redis 后,发起了大量对同一数据的数据库访问,导致对数据库服务器造成压力。应对策略应该在业务数据分析与预防方面进行,配合进行监控测试与即时调整策略,毕竟单个key的过期监控难度较高,配合雪崩处理策略即可。