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

布隆过滤器:快速判断某个元素是否存在

特点:高效、空间占用小、允许一定误判

布隆过滤器在 Redis 里的实现机制,核心就是:

  1. 用一个大位图(bitmap)来表示集合
    位图长度 = m
    初始值都是 0
    插入元素时

  2. 通过 k 个不同的哈希函数,对元素做哈希
    每个哈希结果 % m 得到一个索引位置
    用 SETBIT bitmap index 1 把这些位置标记为 1

  3. 查询元素时
    同样计算 k 个哈希位置
    用 GETBIT bitmap index 检查这些位置是否都是 1
    如果有任何一个位置是 0 → 一定不存在
    如果全部是 1 → 可能存在(有误判风险)

🌍 常见使用场景

  1. 网页爬虫的 URL 去重
    爬虫在抓取网页时,需要判断某个 URL 是否已经访问过。
    如果用哈希表存储所有 URL,内存消耗会非常大。
    使用布隆过滤器可以快速判断 URL 是否可能访问过,大幅减少存储开销。

  2. 缓存穿透问题
    在缓存(如 Redis)+ 数据库架构中,如果用户频繁请求数据库中不存在的 key,会导致请求直接打到数据库(缓存穿透)。
    解决方案:在缓存前加一层布隆过滤器,快速判断 key 是否可能存在,不存在则直接拦截。

  3. 黑名单/白名单过滤
    比如:垃圾邮件系统、恶意 IP 拦截、用户黑名单等。
    不需要存储所有黑名单,只需用布隆过滤器判断某个 IP/邮箱是否可能在名单中。

  4. 数据库或存储系统加速
    HBase、LevelDB、RocksDB 都在内部使用布隆过滤器。
    用于快速判断某个 key 是否在某个文件或存储块中,避免不必要的磁盘 IO。

  5. 推荐系统/广告系统去重
    例如:广告推荐时,需要判断某个用户是否已经看过某条广告。
    使用布隆过滤器可以快速判断,避免重复推荐。

http://www.xdnf.cn/news/20359.html

相关文章:

  • 【Leetcode】高频SQL基础题--1164.指定日期的产品价格
  • 【Linux手册】管道通信:从内核底层原理到使用方法
  • 实现滚动到页面指定位置
  • Lenovo联想YOGA Pro 16 IAH10 2025款笔记本电脑(83L0)开箱状态预装OEM原厂Win11系统
  • Android开发-常用布局
  • Environments
  • Python跳过可迭代对象前部元素完全指南:从基础到高并发系统实战
  • Rust 登堂 之 Drop 释放资源(十一)
  • 延迟 队列
  • MySQL索引和B+Tree的关系
  • 家长沉迷游戏刷剧对儿童学习体验的影响:儿童教育心理学视角分析
  • 如何在Python中使用正则表达式替换特定格式的文本?
  • 软考中级习题与解答——第三章_操作系统(1)
  • Jenkins与Kubernetes集成部署流水线
  • 【数据结构基础习题】-1- 数据结构基本操作
  • 大模型架构演进全景:从Transformer到下一代智能系统的技术路径(MoE、Mamba/SSM、混合架构)
  • Python操作MySQL的两种姿势:原生SQL与ORM框架SQLAlchemy详解
  • CesiumJS详解:打造专业级Web 3D地球仪与地图的JavaScript库
  • 计算机视觉(十一):边缘检测Canny
  • 【Java基础|第三十六篇】JDK1.8中的新特性
  • Nginx主配置文件
  • STM32 JLINK下载失败解决方案
  • 1.12 Memory Profiler Package - Summary
  • CentOS7 Hive2.3.8 安装图文教程
  • 四、神经网络的学习(中)
  • 安卓学习 之 图片控件和图片按钮
  • 2025年金融专业人士职业认证发展路径分析
  • 实现自己的AI视频监控系统-第四章-基于langchain的AI大模型与智能体应用1
  • 18.4 查看订单
  • 动态维护有效区间:滑动窗口