数据结构中怎么实现布隆过滤器高效拦截海量重复请求

胖涛吖_9458

胖涛吖_9458

2026-08-09

969人浏览

原创

布隆过滤器的关键在于“快速否定”:只要确认请求一定未出现就立即拦截,若判断可能存在则交由后续校验;其通过位数组+多哈希函数以极小空间成本实现毫秒级存在性判断,支撑10万+ qps。

数据结构中怎么实现布隆过滤器高效拦截海量重复请求

布隆过滤器实现高效拦截重复请求,关键不在“存数据”,而在“快速否定”——只要能第一时间确认某个请求**一定没出现过**,就直接放行;若判断为“可能存在”,再走后续校验。这种“先筛后查”的策略,让它在高并发防重场景中极轻量、极快。

位数组 + 多哈希函数:最小成本标记存在性

布隆过滤器不存原始请求参数(比如订单号、扫码ID),只用一个大位数组(如 1 亿 bit ≈ 12.5MB)和 3–7 个独立哈希函数。每次收到请求时:

  • 对请求标识(如 barcode_12345)运行 k 个哈希函数,得到 k 个数组下标;
  • 检查这 k 个位置是否全为 1:只要有一个是 0,说明该请求**绝对没来过**,可立即拦截或拒绝;
  • 若全为 1,则标记为“可能存在”,进入下一步(如查 Redis 或数据库)做精确判定。

这个过程只有几次哈希计算 + k 次内存读取,耗时通常低于 0.1ms,轻松支撑 10 万+ QPS。

参数要提前算准:容量和误差率决定实效

误判率(假阳性)不是随机的,它由位数组长度 m 和哈希函数个数 k 共同决定。实际部署前必须按预期数据量预估:

  • 假设日均新增 500 万请求,保留 90 天 → 总量约 4.5 亿;
  • 设允许误判率 0.1%(即千分之一),用公式 m = −n × ln(ε) / (ln2)² 可算出所需位数 ≈ 64 亿 bit(约 780MB);
  • 最优哈希个数 k = m/n × ln2 ≈ 5,选 5 个高质量哈希函数(如 MurmurHash3 + CityHash 组合)效果更稳。

参数设小了,误判飙升;设大了,浪费内存。Redis 的 BF.RESERVE key 0.001 5000000 就是典型初始化命令。

落地时绕不开的三个实操要点

纯理论能跑通,但工程中得处理真实约束:

  • 不支持删除:基础版无法清除已过期请求(如 30 分钟前的扫码 ID)。解法是定期重建新过滤器,或改用支持计数的变种(如 Counting Bloom Filter);
  • 哈希函数必须独立均匀:避免多个函数输出集中在某段区间。实践中常用“双重哈希法”——用一个哈希值生成多个偏移,比调用 5 个不同库更可控;
  • 务必搭配二级校验:布隆说“可能存在”,不代表真存在。例如扫码场景,BF 返回 1 后,必须查一次 Redis 订单状态或 DB 主键,才能最终决定是否拒单。

为什么比 Redis Set 更适合防重?

存 1 亿个字符串 ID:

  • Redis Set 至少占 1GB+ 内存(每个字符串带额外元信息);
  • 布隆过滤器仅需 ~120MB(0.1% 误判率),内存降 90%,且查询不依赖网络往返;
  • Set 查是否存在是 O(1) 但有内存分配开销;BF 是纯 CPU + cache 访问,延迟更稳、更可预测。

它不是替代精确存储,而是做最外层的“智能门卫”——挡掉 99% 的无效穿透,让后端真正聚焦在有价值的请求上。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.12.01

2481

7

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

2025.12.22

356

20

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

2026.01.06

397

22

C++ 数据结构与算法实现教程合集
C++ 数据结构与算法实现教程合集

以 C++ 为实现语言,系统讲解核心数据结构与算法,涵盖链表(单链表/双链表/环检测)、栈与队列(单调栈/优先队列)、二叉树(遍历/BST/AVL/红黑树)、哈希表(开地址法/链地址法)、图(邻接表/BFS/DFS/Dijkstra/拓扑排序)、常见排序算法(快排/归并/堆排/计数排序)的实现与复杂度分析,同时分享 LeetCode 刷题技巧、竞赛编程常用模板(二分/前缀和/滑动窗口/动态规划),帮助开发者夯实算法基础。

2026.05.09

452

25

Python uv使用教程
Python uv使用教程

本专题汇总了 Python uv 使用教程与高效使用指南,从 uv 安装配置、常用命令到虚拟环境、依赖管理与项目打包,系统讲解如何用 uv 替代 pip 与 poetry,全面提升 Python 项目开发效率,助你快速上手这一现代化包管理工具,打造干净高效的 Python 工作流。

2026.10.15

0

15

剧云AI短剧创作教程合集
剧云AI短剧创作教程合集

本专题聚焦剧云AI短剧创作,讲解从短剧灵感、梗概、全局大纲到分集、分场和正文的完整流程及节奏设计方法。

2026.10.14

0

15

剧云AI剧本创作零基础入门
剧云AI剧本创作零基础入门

本专题系统讲解剧云AI剧本创作流程,涵盖灵感、梗概、大纲、分场与正文生成,帮助新手快速完成首个中文剧本项目。

2026.10.14

0

14

VibeKnow文档转视频操作指南
VibeKnow文档转视频操作指南

本专题讲解VibeKnow上传Word、TXT、Markdown等材料生成视频的方法,覆盖内容解析、脚本组织、画面生成与成片检查。

2026.10.14

0

15

VibeKnow知识视频制作与导出详解
VibeKnow知识视频制作与导出详解

本专题整理VibeKnow从注册、素材上传、AI生成到预览导出的完整操作,帮助新手快速制作第一条知识讲解视频。

2026.10.14

0

13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习