
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存雪崩对于大多数软件运维程序员来说应该都不陌生的吧,而本文我们就通过案例分析来简单了解一下,缓存雪崩原因与解决方案分享。
缓存雪崩指的是大量的请求无法在Redis缓存系统中处理,请求全部打到数据库,导致数据库压力激增,甚至宕机。
出现该原因主要有两种:
大量热点数据同时过期,导致大量请求需要查询数据库并写到缓存;
Redis故障宕机,缓存系统异常。
缓存大量数据同时过期
数据保存在缓存系统并设置了过期时间,但是由于在同时一刻,大量数据同时过期。
系统就把请求全部打到数据库获取数据,并发量大的话就会导致数据库压力激增。
缓存雪崩是发生在大量数据同时失效的场景,而缓存击穿(失效)是在某个热点数据失效的场景,这是他们大的区别。
缓存雪崩解决方案
过期时间添加随机值
要避免给大量的数据设置一样的过期时间,过期时间=baes时间+随机时间(较小的随机数,比如随机增加1~5分钟)。
这样一来,就不会导致同一时刻热点数据全部失效,同时过期时间差别也不会太大,既保证了相近时间失效,又能满足业务需求。
接口限流
当访问的不是核心数据的时候,在查询的方法上加上接口限流保护。比如设置10000req/s。
如果访问的是核心数据接口,缓存不存在允许从数据库中查询并设置到缓存中。
这样的话,只有部分请求会发送到数据库,减少了压力。
限流,就是指,我们在业务系统的请求入口前端控制每秒进入系统的请求数,避免过多的请求被发送到数据库。