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

Redis4缓存穿透:布隆过滤器与空对象方案

缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在这样缓存永远不会生效,这些请求都会达到数据库。

1)方案1:缓存空对象

在缓存中存储一个空值每次读取这个空

优点:实现简单,维护方便

缺点:造成额外的内存消耗(可以在设置缓存为null时,设置一个TTL

可能造成短期不一致(TTL之内数据库插入了该条数据)

2)方案2:布隆过滤器

布隆过滤器是一种空间效率极高的概率性数据结构,用于判断一个元素是否属于某个集合。

数据结构组成

  • 位数组(Bit Array):一个长度为 m 的二进制数组,初始全为 0。

  • 哈希函数集合:k 个独立的哈希函数,每个函数能将元素映射到 \([0, m-1]\) 的范围内。

  1. 对 x 应用同样的 k 个哈希函数,得到 k 个位置。

  2. 检查这些位置的二进制位是否全为 1:

  • 若全为 1,可能存在(可能是假阳性)。

  • 若至少有一个为 0,一定不存在(无假阴性)。

也就是说,布隆过滤器说存在,不一定存在。说不存在,那一定不存在

所以仍然有一定的可能性会发生穿透

优点:内存占用少,没有多余key

缺点:实现复杂,存在误判可能

缓存雪崩

缓存雪崩是指在同一时段大量的缓存Key同时失效或者Redis服务宕机,导致大量请求直接到达数据库,带来巨大压力

方案

解决方案1:给不同的Key的TTL添加随机量

解决方案2:利用Redis集群提高服务的可用性

解决方案3:给缓存业务添加降级限流策略

解决方案4:给业务添加多级缓存

缓存击穿

缓存击穿问题也叫热点key问题

就是一个被高并发访问缓存重建业务较复杂的key突然失效了,无数的请求访问会瞬间给数据库带来巨大压力。

1)方案1:互斥锁

性能较差,多个线程会互相等待

2)方案2:逻辑过期

我们给key在逻辑上加一个过期时间

对比两个解决方案的优缺点

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

相关文章:

  • HTML 极简个人介绍卡片(侧重语义化标签和响应式布局)
  • 单例模式详细讲解
  • 哈希表法求环形链表
  • 从零开始实现一个简单的 RPC 框架(Java 版)
  • kubeadm 部署 K8S(v1.23.1)集群
  • 直播带货与开源AI智能名片链动2+1模式S2B2C商城小程序:重塑电商营销新格局
  • python 【技术面试题和HR面试题】➕列表操作、条件判断、循环、函数定义编程题
  • 从0开始学习R语言--Day49--Lasso-Cox 回归
  • 十五、K8s可观测能力:日志收集
  • 【41】MFC入门到精通——MFC中 GetLBText()、GetWindowText()、SetWindowText区别
  • PyTorch笔记8----------卷积神经网络
  • 魔术公式轮胎simulink模型建立及参数拟合
  • 【机器学习】第三章 分类算法
  • HANA SQLScript中的变量类型汇总
  • 从现场出发:能源系统中的智能设备与实际落地工具解读
  • ClickHouse 多表 JOIN 时 SELECT * 语法错误解析与解决方案
  • 不同相机CMOS噪点对荧光计算的影响
  • AWS WebRTC:RTP讲解
  • 磁盘分区(D盘分给C盘)
  • 学习笔记(39):结合生活案例,介绍 10 种常见模型
  • IPC进程间通信 interprocess communicate
  • 09-three.js Materials
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘flask’问题
  • 串口232通讯数据传输丢失的原因、不可靠性及底层原理分析
  • 12.9 Mixtral-8x7B核心技术解密:如何用1/3参数实现4倍推理速度碾压LLaMA2?
  • RabbitMQ概述和工作模式
  • 苍穹外卖项目日记(day11)
  • 优先队列的实现
  • vue中的this.$set
  • Spring Cloud LoadBalancer 详解