现象
系统平稳运行过程中,数据库连接量瞬间激增,但是没有大量key过期,redis内存平稳,redis服务器CPU正常。
原因
某一个热点key过期了,这个key访问量巨大,导致大量请求在redis没拿到数据,直接从数据库拿,导致数据库崩溃。
解决方法
- 预先设定。对于一些可以预测到的热点数据,延长过期时间。
- 现场调整。监控访问量,对访问量激增的数据延长过期时间 或 设置永久key。
- 后台刷新数据。启动定时任务,在高峰期来之前,刷新数据有效期。
- 设置二级缓存,且失效时间不同,保障不会同时被淘汰。
- 加分布式锁。慎用!