当前位置: 首页 > 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.dtcms.com/a/283834.html

相关文章:

  • Python爬虫实战:Requests与Selenium详解
  • 电脑截图软件排行榜 Windows和mac电脑截图软件TOP10
  • Perspective:一款开源的交互式分析和数据可视化组件
  • ZKmall开源商城架构助力增长:多端流量聚合与用户体验
  • macOS 12.7.6部署Ollama+Dify避坑指南
  • 集群聊天服务器各个类进行详解
  • LAMP迁移LNMP Nginx多站点配置全流程
  • 大型语言模型(LLM)在网络安全中最具商业价值的应用场景(Grok3 回答 DeepSearch模式)
  • Java-75 深入浅出 RPC Dubbo Java SPI机制详解:从JDK到Dubbo的插件式扩展
  • 新版本flutter(3.32.7) android 端集成百度地图sdk
  • 网络编程7.17
  • cors跨域资源共享
  • Python 网络爬虫 —— 代理服务器
  • 阿里云-通义灵码:隐私保护机制—为数据安全筑起铜墙铁壁
  • Web3.0 实战项目、简历打造、精准投递+面试准备
  • MongoDB 与MySQL 及es的区别
  • 黑客知识-攻击
  • 数据仓库分层经典架构:ODS、DWD、DWS
  • 安卓 GoFasting(间歇性断食)v1.03.35.0708
  • python-字典、集合、序列切片、字符串操作(笔记)
  • cdh6.3.2的hive使用apache paimon格式只能创建不能写报错的问题
  • Thymeleaf 表单绑定与验证详解
  • Rabbitmq direct 模式与 finout区别
  • Apache Ignite 的 Pages Writes Throttling(页面写入节流)
  • C++ - 仿 RabbitMQ 实现消息队列--C++11 异步操作实现线程池
  • InfluxDB 3与Apache Parquet:打造高性能时序数据存储与分析解决方案
  • Apache DolphinScheduler介绍与部署
  • UE5 Nanite使用
  • 下班倒计时
  • 链路聚合实训