什么是缓存雪崩
缓存雪崩通常是指缓存大面积失效,或者 Redis 宕机,大量的请求直接去请求到了数据库,在并发大的情况下可能直接导致数据库宕机
出现缓存雪崩的原因
在将数据存入缓存的时间我们通常都需要为缓存设置过期时间,避免缓存长时间占用内存资源,当然也会配合 redis 的淘汰策略对缓存进行失效淘汰
假如缓存设置的过期时间是相同的并且刚好在同一时刻全部失效,或者 Redis 宕机,就会造成所谓的缓存雪崩
如何避免缓存雪崩
在对缓存 key 设置过期时间的时候给这个过期时间加上一个随机值,尽量避免缓存同时失效的情况发生
一些热点数据可以不设置过期时间,这样缓存就不会过期,在更新数据成功之后再将缓存失效
为了避免 redis 宕机的情况,最好是采用 redis 哨兵或者集群模式部署,将热点数据分散存储在不同的 redis 库中也能避免雪崩的发生
最好是配合本地缓存+降级服务,这样如果缓存真的出了问题至少服务是可用的