【Redis深入】缓存雪崩与热点key的重建

本文介绍了Redis缓存中常见的三个问题:缓存穿透、缓存雪崩以及热点key的重建。缓存穿透可以通过缓存空对象或使用布隆过滤器来解决;缓存雪崩可以通过提高缓存服务的高可用性和使用依赖隔离组件来避免;热点key的重建则可以利用互斥锁、逻辑过期时间或热点散列策略来处理。
摘要由CSDN通过智能技术生成

1.前言

  • 使用缓存并不是一劳永逸的,可能会出现各种问题,简单介绍下使用缓存遇到的常见问题及解决办法。

2.缓存穿透

2.1 定义

  • 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,

  • 缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。

2.2 造成缓存穿透的原因

  • 业务自身代码或者数据出现问题

  • 一些恶意攻击、爬虫等造成大量空命中

2.3 解决方法

  • 缓存空对象

  • 空值做缓存,即缓存层中存了更多的键,这就需要更多的内存空间 ,可以对其设置一个较短的过期时间,让其自动清除。

  • 优点是实时性高,代码维护简单。

  • 布隆过滤器拦截

  • 如果布隆过滤器认为某个键 不存在,那么就不会访问存储层。

  • 适用于数据命中不高,数据相对固定实时性低(通常是数据集较大)的应用场景,代码维护较为复杂,但是缓存空间占用少。

3. 缓存雪崩

3.1 定义

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Redis缓存雪崩是指在缓存中大量的缓存数据同时失效或在同一时间段内过期,导致大量的请求直接访问后端数据库,使得数据库压力骤增,甚至导致数据库宕机,从而引发系统性能下降或整个系统崩溃的现象。 造成Redis缓存雪崩的原因主要有以下几个: 1. 缓存数据同时过期:如果大量的缓存数据同时过期,那么在缓存数据重新生成之前,所有的请求都会直接访问数据库。这会导致数据库瞬间承受大量的请求,造成数据库负载激增。 2. 缓存层故障:当缓存层发生故障,无法提供正常的缓存服务时,所有的请求都会直接访问后端数据库。如果数据库无法承受如此大量的请求,就会导致数据库性能下降或宕机。 3. 缓存集中失效:如果所有的缓存数据都集中在同一个时间点失效,那么在缓存数据重新生成之前,所有的请求都会直接访问数据库。这样会造成数据库瞬间承受巨大的压力。 针对Redis缓存雪崩问题,可以采取以下几种解决方法: 1. 设置缓存失效时间的随机性:可以在设置缓存失效时间时,给每个缓存数据都加上一个随机的失效时间,使得缓存数据在不同的时间失效,避免同时失效。 2. 引入缓存预热机制:在系统启动或低峰期,可以提前主动加载缓存数据,使得缓存数据在使用时已经被加载到缓存中,避免在高峰期大量请求同时访问数据库。 3. 限流和熔断:可以通过限制请求的并发数或设置熔断策略来控制对数据库的访问压力,避免数据库承受过多的请求导致崩溃。 4. 多级缓存:可以引入多级缓存架构,将缓存数据分为多个层级,例如本地缓存、分布式缓存和数据库,使得请求在不同层级的缓存中逐级查找,减轻单一缓存层的压力。 相关问题: 1. 除了Redis,还有哪些常用的缓存系统? 2. 如何设计一个高可用的缓存架构? 3. 缓存穿透和缓存击穿是什么,它们与缓存雪崩有何区别? 4. 如何监控和预防缓存雪崩问题的发生?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值