目录
一、缓存雪崩
1.1 缓存雪崩的概念
1.2 如何解决缓存雪崩问题?
二、缓存击穿
2.1 缓存击穿的概念
2.2 解决缓存击穿
三、缓存穿透
3.1 缓存穿透
3.2 解决缓存穿透
一、缓存雪崩
1.1 缓存雪崩的概念
缓存雪崩是指在短时间内,有大量缓存同时过期,导致大量的请求直接查询数据库,从而对数据库造成了巨大的压力,严重情况下可能会导致数据库宕机的情况叫做缓存雪崩。
我们先来看下正常情况下和缓存雪崩时程序的执行流程图,正常情况下系统的执行流程如下图所示:
缓存雪崩的执行流程,如下图所示:
以上对比图可以看出缓存雪崩对系统造成的影响,导致缓存雪崩的主要原因有以下几个:
-
缓存过期时间设置不合理:当大量缓存数据在同一时间失效时,会导致大量请求直接打到数据库或者后端服务。
-
缓存服务器故障:如果缓存服务器发生故障,无法提供缓存服务,那么所有请求将直接访问数据库或者后端服务。
-
缓存数据的热点分布不均匀:如果某些热门数据集中在一部分缓存节点上,当这些节点发生故障或者数据失效时,会导致请求直接打到数据库或者后端服务。
1.2 如何解决缓存雪崩问题?
缓存雪崩的常见解决方案有以下几个:
-
随机生成缓存过期时间:随机生成缓存过期时间,可以避免缓存同时过期,从而避免雪崩问题的发生。