欢迎光临
我们一直在努力

Redis 缓存雪崩,缓存击穿和缓存穿透技术方案总结

一、缓存雪崩

缓存雪崩定义:

大量请求无法在 Redis 缓存中进行处理,紧接着大量请求发送到数据库层,导致数据库层压力激增

缓存雪崩原因一:

详细描述:

缓存中有大量数据同时过期,导致大量请求无法得到处理 保存在缓存中的数据设置了过期时间,如果某个时刻大量数据同时过期,此时,应用再次访问这些数据,就会发生缓存缺失。紧接着,应用就会将请求发送到数据库,并发量大时造成数据库压力大,进而影响扩大到数据库的其它正常业务请求处理。(大量缓存同时过期,请求直接打到数据库,进而影响其它正常业务)

解决方案:

1. 避免大量数据设置相同过期时间(加随机值1~3分钟)
目的:保证数据近似过期时间,同时保证数据大量过期
2. 服务降级
a) 业务访问非核心业务,暂停从缓存查询数据,直接返回空、错误、或预定义信息
b) 业务访问核心数据是,允许你查询缓存,如果缓存缺失,可以继续查询数据库读取数据

缓存雪崩原因二:

详细描述:

Redis 缓存实例故障导致宕机,无法处理请求,导致大量请求挤压到数据库 Redis 支持数万级别的吞吐量请求能力,但数据库仅支持数千。处理能力相差数十倍。当缓存雪崩发生是,大量请求落到数据库,导致数据库压力陡增,导致系统崩溃

解决方案:

1. 业务系统实现熔断或请求限流

熔断: 暂定业务应用对缓存系统的接口访问而是直接返回,防止缓存雪崩导致的数据库雪崩,甚至整个系统崩溃。影响整个缓存系统对外服务
请求限流:控制每秒进入系统的请求书,避免过多请求被发送到数据库

2. 提前预防,构建高可用 Redis 缓存集群

主从:避免单点故障

二、 缓存击穿

缓存击穿定义:

针对某个访问非常频繁的人点数据的请求,无法在缓存中进行处理,紧接着,访问该数据的大量请求被发送到数据库,导致数据库压力激增,而影响数据库处理其它请求

缓存击穿原因:

通常发生在大量数据缓存过期时

缓存击穿解决方案:

热点数据不设置过期时间

三、 缓存穿透

缓存穿透定义:

访问的数据既不在缓存,也不在数据库中,导致请求在访问缓存时,发生缓存缺失,再去访问数据库是,发现数据库中也没有访问的数据。最终数据不会写入缓存。在大量请求访问数据,导致缓存和数据库产生巨大压力【缓存及数据缺失,无法写入缓存】

缓存穿透原因:

1. 业务层误操作:缓存和数据库中数据被误删除了,所以缓存和数据库中无数据
2. 恶意攻击:专门访问数据库中没有的数据

缓存穿透的三种解决方案:

1. 缓存控制或缺省值
2. 使用布隆过滤器快速判断数据是否存在,避免从数据库中查询数据是否存在,减轻数据库压力
布隆过滤器原理:
3. 在请求入口前端进行请求检测
检测包括:参数合理性、是否缺失及正确等

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » Redis 缓存雪崩,缓存击穿和缓存穿透技术方案总结

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址