写点什么

Redis - 缓存穿透、缓存击穿、缓存雪崩

用户头像
insight
关注
发布于: 2021 年 03 月 24 日
Redis - 缓存穿透、缓存击穿、缓存雪崩

缓存穿透、缓存击穿、缓存雪崩是使用 Redis 时最常遇到的三种异常情况,然而经常有人弄混这三种情况,下面就详细介绍这三种异常的区别,以及产生原因和应对手段。

缓存雪崩

现象

缓存中大量的数据失效,导致大量的请求无法获取数据,从而将流量压力传导到数据库上。

原因

一般而言,缓存雪崩有两种可能性:

  1. 大量的数据同一个时间失效,比如业务关系强相关的数据要求同时失效

  2. Redis 宕机

解决方案

  1. 如果数据需要同一时间失效,可以给这批数据加上一些随机值,使得这批数据不要在同一个时间过期,降低数据库的压力。

  2. 服务降级:如果发现产生缓存雪崩,可以对服务进行降级,提供默认返回值,或简单的提示信息。

  3. 服务熔断:对于非核心功能的业务,拒绝其请求;只允许核心功能的业务访问数据库获取数据。

  4. 做好主从的部署:当主节点挂掉后,能快速地使用从结点顶上。

缓存击穿

现象

多个请求访问某一个热点数据,该数据突然失效,导致大量数据访问数据库获取相同的数据。

原因

一般而言都是因为热点数据过期。

解决方案

不给热点数据设置过期时间。需要更新数据时,使用同步直写或者异步写的方式更新缓存。

缓存穿透

现象

如果要访问的数据,在缓存和数据库中都不存在,就会同时给缓存和数据库带来压力。

原因

一般而言,只有两种情况会出现缓存穿透:

  1. 业务数据被误删,导致缓存和数据库中都没有数据。

  2. 恶意进行 DDos 攻击。

解决方案

  1. 给缓存设置默认值,如果找不到,就设置默认值或者空值,避免重复穿透。

  2. 使用布隆过滤器,如果布隆过滤器中没有查到数据,就不去数据库中查。

  3. 在处理请求前增加恶意请求检测,如果检测到是恶意攻击请求,则拒绝进行服务。


用户头像

insight

关注

不要混淆行动与进展、忙碌与多产。 2018.11.17 加入

永远都是初学者

评论

发布
暂无评论
Redis - 缓存穿透、缓存击穿、缓存雪崩