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

【Redis】Redis缓存雪崩、缓存穿透、缓存击穿(热key问题)

目录

一、缓存穿透

1、概念

2、解决办法

1.缓存空对象

2.布隆过滤

二、缓存雪崩

1、概念

2、解决办法

1.给key设置随机的过期时间TTL

2.业务添加多级缓存

3.利用集群提供服务可用性

4.缓存业务添加降级限流

三、缓存击穿

1、概念

2、解决办法

1.互斥锁

2.逻辑过期


一、缓存穿透

1、概念

当客户端带参数来请求某一数据的信息时,会先去在缓存里面找,如果缓存没有就去数据库中查找并写入缓存返回,如果这个请求所带的参数是非法参数,当它查询缓存时,缓存中没有该数据,此时就会查询数据库而数据库中也没有该数据,没办法构建缓存数据

2、解决办法

1.缓存空对象

当请求穿过缓存请求数据库时,由于数据库中没有数据,所以此时我们将null进行返回并缓存,下次请求时从缓存中直接获取到null。这种方式实现简单,但是内存占用会比较大,它也存短暂的数据不一致问题

2.布隆过滤

在请求到达缓存之前,先会经过布隆过滤器对请求校验,如果合法就放行如果非法就拒绝,这种方式内存占用少,但是实现复杂也存在误判的可能

二、缓存雪崩

1、概念

当某一时刻缓存中大量的key同时失效或者redis宕机,导致请求大量的打到数据库上导致数据库压力剧增

2、解决办法

1.给key设置随机的过期时间TTL

产生缓存雪崩的其中一个原因是大量key同时过期,我们可以通过设置不同的过期时间来防止缓存雪崩,而设置不同的过期时间可以设置随机的过期时间

2.业务添加多级缓存

在多个层面去建立缓存

3.利用集群提供服务可用性

提供系统可用性,可以搭建redis集群,当集群中一个服务宕机时,不会影响整体缓存的使用

4.缓存业务添加降级限流

当redis出现异常时,可以通过降级限流来保护数据库的安全性

三、缓存击穿

1、概念

一个被高并发访问且重建缓存业务复杂的key忽然失效,无数的请求在瞬间给数据库带来巨大冲击

2、解决办法

1.互斥锁

由于这个热key失效,所以当请求来时就需要去数据库查询并重建缓存,但是由于这个key是一个被高并发访问的key,所以同一时间访问完数据库去重建该key的线程可能较多,导致多个线程重复重建以及响应变慢,此时我们可以对缓存重建加锁,当线程1去重建的时候线程2不在去重复重建,但是其他没有获取到锁的线程需要等待,性能受到影响

2.逻辑过期

我们在存入这个热key在存入的时候给他加一个逻辑过期的时间字段,该字段记录过期时间,每次获取的时候查看该key是否逻辑过期,如果过期此时需要重建该缓存,此时就可以开启一个线程异步的去重建,然后返回逻辑过期的数据,当重建缓存的异步线程没有执行完时,此时另一个线程来访问,发现过期尝试重建时,没有拿到锁,于是它将逻辑过期的旧数据返回。它线程无需要等待,性能好。但是不能保证一致性,有额外的内存消耗且实现复杂

 

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

相关文章:

  • 为什么很多程序员喜欢linux系统?
  • Bean 作用域和生命周期
  • PMP考试常见13个固定套路
  • Leecode101 ——对称二叉树
  • JVM学习随笔03——Java堆中new一个对象的步骤
  • 虹科方案 | CEMEX 使用HK-Edgility 智能边缘计算平台简化其企业 WAN 管理和运营
  • rk3568 系统移植和编译
  • 深度解析C++异常处理机制:分类、处理方式、常见错误及11新增功能
  • FPGA时序约束(四)主时钟、虚拟时钟和时钟特性的约束
  • JNI开发
  • JAVA有哪些特点?
  • 使用读写锁提高并发
  • 使用@PropertySource加载配置文件
  • 事务及分布式事务解决方案
  • 【思科、华为、华三、锐捷网络设备巡检命令】
  • 代码随想录算法训练营第五十二天
  • 【Linux网络】传输层中UDP和TCP协议
  • 工具︱ Web3加密浏览器Brave有什么特别之处?
  • 绝对不能错过这份沃尔玛实用插件工具大全
  • 【Java】字符串模板拼接的方法
  • Vue3项目中使用ECharts图表并实现自适应效果
  • 快速跑通环信IM Android Demo
  • leetcode解题思路分析(一百三十九)1190 - 1196 题
  • PHP+vue基于web的小区物业管理管理系统1995a
  • 区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测
  • 【AI 导航网站】为了更好的收集 AI 资源,我开发了一个 AI 导航网站
  • 谈谈HMI 的自动化生成技术
  • docker安装elasticsearch
  • Docker:使用dockerFile创建镜像(war包和jar包)
  • 2.基础篇