当前位置: 首页 > news >正文

Redis中缓存穿透、缓存击穿、缓存雪崩的详解

如何理解Redis缓存的穿透、击穿、雪崩问题:

缓存穿透

是指缓存中和数据库中都没有数据,而用户不断访问,导致这个不存在的数据每次请求都要到存储层去查询,这样失去了意义。

缓存穿透的解决方案有哪些?

  • 缓存null值
  • 布隆过滤
  • 增强id的复杂度,避免被猜测id规律
  • 做好数据的基础格式校验
  • 加强用户权限校验
  • 做好热点参数的限流

讲一讲布隆过滤

布隆过滤器的特点:
容器角度:

  • 如果布隆过滤器判断结果为元素存在,那么该元素实际上元素不一定会存在,由于哈希碰撞,所以会存在一定误判率。
  • 如果布隆过滤器判断结果为元素不存在,那么他就一定不存在,因为无论哈希碰撞啥的,只要该元素计算出下标值对应数组元素值为0,那么该元素就必定不存在。
  • 布隆过滤器是不支持删除元素的,因为如果位图的某个位被多个元素占用着,那么如果删除其中一个元素是否能将该位置0能,置0的话会影响到其他元素,不置0就等于没删除。

元素角度:

  • 如果元素实际不存在,布隆过滤器可能判断存在。
  • 如果元素实际存在,布隆过滤器一定判断存在。

利用第二个特性,我们就能解决持续从数据库查询不存在的值的问题,把要查询的值先过布隆过滤器,判断是否存在,存在就走redis缓存,不存在就直接返回,并且配合缓存空值,可以有效解决缓存穿透问题,虽然存在一定误差,但是在业务范围内允许接受。

  • 第一步先查询数据库数据并加入到布隆过滤器中。
  • 请求发送过来布隆过滤器判断是否命中,命中就走缓存,之后接着看是否走数据库还是直接从缓存获取返回。
  • 如果布隆过滤器miss,就直接返回,不走cache了。

缓存击穿

是缓存中没有数据,而数据库中有数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大。

解决方案优点缺点
互斥锁
  • 没有额外的内存消耗
  • 保证一致性
  • 实现简单
  • 线程需要等待,性能受影响
  • 可能有死锁风险
逻辑过期 
  • 线程无需等待。性能较好
  • 不保证一致性
  • 有额外内存消耗
  • 实现复杂

缓存雪崩

就是同一时间内,大量的缓存key值同时失效或者redis服务器宕机,导致大量的请求到达数据库,带来巨大的压力

解决方案

​​​​​​​

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

  • 避免大量缓存数据同时过期,可以设置缓存的过期时间为随机值,或者在缓存集中到期之前提前对热点数据进行预热,将热点数据提前加载到缓存中。

2. 使用多级缓存

  • 将缓存数据分散到不同的缓存节点或缓存服务器中,以减少缓存集中到期的风险。可以结合本地缓存、分布式缓存等方式来实现多级缓存。

3. 限流和熔断

  • 对请求进行限流处理,避免大量请求同时涌入数据库。可以使用限流算法(如令牌桶、漏桶算法)对请求进行限制。同时,可以设置熔断机制,在检测到系统异常时暂时屏蔽部分请求,以保护数据库免受过载。

4. 数据库优化

  • 提高数据库的处理能力和稳定性,可以采用数据库集群、读写分离、垂直拆分等方式来优化数据库架构,提高数据库的负载能力。

http://www.lryc.cn/news/428063.html

相关文章:

  • [Meachines] [Medium] Popcorn SQLI+Upload File+PAM权限提升
  • 【Linux】python进程管理之supervisor安装使用教程
  • BEM架构
  • 物联网(IoT)详解
  • ansync/await 运行流程图
  • 生产环境docker nginx+php8.0镜像
  • 【Hadoop】核心组件深度剖析:HDFS、YARN与MapReduce的奥秘
  • Docker Swarm部署SpringCloud Alibaba微服务踩坑记录
  • 深入理解Spring Boot中的AOP应用:从基础组件到高级功能的实现
  • 《区块链与监管合规:在创新与规范之间寻求平衡》
  • Nuxt3【服务器】server 详解
  • 防火墙技术原理与应用
  • 【BUU】[NewStarCTF 2023 公开赛道]Final -CP读取文件内容
  • 火绒安全:一款强大且高效的国产杀毒软件
  • Oracle 的DBA有哪些权限
  • 在navicat上运行sql文件
  • STM32裸机和RTOS中的线程安全问题及STM32cubeMX中的线程安全策略
  • 图的遍历
  • CUDA-MODE课程笔记 第8课: CUDA性能检查清单
  • 【备战蓝桥杯青少组】第二天 奇特的砖墙
  • 图像处理 -- 仿射变换之Affine Transformation
  • Nuxt3【项目配置】nuxt.config.ts
  • 中智讯“2024高校人工智能边缘应用项目实战师资培训班”圆满举办
  • IIS发布打包后文件
  • 四个自定义 SHAP 图
  • 为什么使用HTTPS?
  • 软件设计-系统架构师(五十五)
  • 三分钟学会线缆电流估算
  • Snipaste 的一款替代工具 PixPin,支持 gif 截图、长截图和 OCR 文字识别,功能不是一点点强!
  • Oracle基础教程