缓存雪崩详解(定义原因及解决方法)

缓存雪崩详解(定义原因及解决方法)-mikechen

什么是缓存雪崩

缓存雪崩是指在缓存系统中,大量缓存数据在同一时间内过期或者清空,导致大量的请求直接访问后端数据源。

如下图所示:

缓存雪崩详解(定义原因及解决方法)-mikechen

缓存雪崩,会造成数据库负载激增,可能引起系统性能下降,甚至崩溃的场景。

 

缓存雪崩的原因

缓存雪崩通常由以下原因引起:

1.大规模缓存失效

当多个缓存键在同一时间过期或被清空,导致大量请求直接访问后端数据库。

如下图所示:

缓存雪崩详解(定义原因及解决方法)-mikechen

过程如下:

1)缓存失效,但依然大量请求访问缓存服务redis;

2)redis大量失效后,大量请求转向到mysql数据库;

3)mysql的调用量暴增,很快就扛不住了,甚至直接宕机;

4)由于大量的应用服务依赖mysql和redis的服务,这个时候很快会演变成各服务器集群的雪崩,最后网站彻底崩溃。

 

2.缓存层故障

如果缓存层,比如:如缓存服务器出现故障,导致无法使用缓存,所有请求都必须访问后端数据源。

 

3.热点数据集中

某些热门数据集中在一些缓存键上,如果这些缓存键失效,会导致大量请求涌入后端数据库。

 

缓存雪崩解决方法

缓存雪崩可能会对系统性能和可用性产生严重影响,因此需要采取一些解决方法:

1.合理设置缓存过期时间

避免大规模缓存同时过期,可以为缓存数据设置随机的过期时间,以分散缓存失效的时间点。

2.缓存层多级缓存

引入多级缓存架构,将缓存分为多个层次,比如:本地缓存、分布式缓存、CDN等。

这样即使某个缓存层出现问题,其他缓存层仍然可以提供服务。

3.缓存的高可用性

缓存层设计成高可用,防止缓存大面积故障,即使个别节点、个别机器、甚至是机房宕掉,依然可以提供服务。

例如: Redis Sentinel 和 Redis Cluster, 都实现了高可用。

4.缓存数据永不过期

对于一些热门数据,可以设置缓存数据永不过期,只在数据发生变化时手动刷新缓存,这样可以避免缓存失效导致雪崩。

5.降级

当访问量剧增、服务出现问题仍然需要保证服务还是可用的。

系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降

6.限流和熔断

实施请求限流和熔断策略,以防止大规模请求冲击后端系统。

通过综合使用这些方法,可以有效地防止缓存雪崩问题的发生,提高系统的可用性和稳定性。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法