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

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

布隆过滤器在 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.pswp.cn/web/95988.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 修改基类List中某一元素的子类类型

描述&#xff1a;基类&#xff1a;BaseClass子类1&#xff1a;A子类2&#xff1a;B然后我有一个List<BaseClass>类型的链表:list&#xff0c;我先往list中添加了两个元素&#xff1a;第一个元素为A类型&#xff0c;第二个元素为B类型&#xff0c;然后我想改变第一个元素类…

基于STM32智能阳台监控系统

基于STM32智能阳台监控系统&#xff08;程序&#xff0b;原理图元件清单&#xff09;功能介绍具体功能&#xff1a;1.采用STM32作为主控芯片实现检测和控制&#xff1b;2.通过光敏电阻采集光线&#xff0c;将当前光线值在LCD1602显示&#xff0c;低于50%控制LED亮&#xff0c;高…

动态维护有效区间:滑动窗口

右指针不断移动获取解&#xff0c;左指针不断移动缩小解范围 左指针的意义非常重要&#xff0c;相当于一个标兵&#xff0c;不断与这个标兵进行比较&#xff0c;如果符合要求&#xff0c;这左指针进行移动&#xff0c;并进行操作&#xff0c;如果不符合要求&#xff0c;则左指针…

嵌入式学习---(单片机)

1.UART的概念通用异步收发器&#xff0c;2个串口&#xff08;1个串口被用于ISP下载程序&#xff0c;1个串口被用于和主机之间的通信&#xff09;&#xff0c;RXD(接收信号线) TXD(发送信号线)2、单工、半双工、全双工概念对比维度单工&#xff08;Simplex&#xff09;半双工&am…

基于单片机的宠物屋智能系统设计与实现(论文+源码)

1设计思路本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c…

【面试】Java基础面试题

1. Java 基本数据类型有哪些&#xff1f;场景&#xff1a;面试官问「String 是不是基本类型&#xff1f;」答案要点&#xff1a;8 种基本类型&#xff1a;byte, short, int, long, float, double, char, boolean。String 是引用类型。追问链条&#xff1a;问&#xff1a;为什么…

PHP云课堂在线网课系统 多功能网校系统 在线教育系统源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 云课堂&#xff0c;依托腾讯云基础服务架构&#xff0c;采用C扩展框架Phalcon开发&#xff0c; 系统功能 实现了点播、直播、专栏、会员、积分、秒杀、微聊等。 友情提示&#xff1a;…

GEM5学习(4): 运行全系统模式的ARM系统

详细说明可以见官网 gem5: Extending gem5 for ARM 下载镜像 mkdir -p cpu_tests/benchmarks/bin/arm cd cpu_tests/benchmarks/bin/arm wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm/Bubblesort wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm…

快捷:常见ocr学术数据集预处理版本汇总(适配mmocr)

快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09;快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09;状态指标验证快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09; 状…

从抽象到实现:Elasticsearch数据类型及其底层Lucene数据结构的深度解析

第一部分&#xff1a;Lucene基础&#xff1a;核心索引结构Elasticsearch的强大功能根植于其核心——Apache Lucene&#xff0c;一个高性能、功能完备的搜索引擎库 1。要深入理解Elasticsearch如何处理各种数据类型&#xff0c;首先必须剖析构成Lucene索引的三个基本数据结构&am…

Claude Code核心功能操作指南

&#xff08;一&#xff09;核心交互面板&#xff1a;认识操作界面 登录后进入 Claude Code 主界面&#xff0c;核心区域分为三部分&#xff0c;各模块功能清晰&#xff1a;可以通过 注册免费体验。左侧导航栏&#xff1a;包含 “新建任务”“历史记录”“收藏夹”“帮助中心”…

数据仓库进化:Agent驱动数智化新范式

目录 回顾&#xff1a;从 "人为中心" 的数仓&#xff0c;到大数据与云数仓的进化 AI Agent 成为数据的 "新用户" Agentic Data Stack 如何打破低效与内耗 企业数智化的新范式 案例与趋势展望 所有软件都会被 Agent 改写一遍 经过半个世纪的数据仓库发…

什么是shellcode

好的&#xff0c;我们来详细地解释一下什么是 Shellcode。核心定义Shellcode 是一段精炼的、用作有效载荷&#xff08;Payload&#xff09; 的机器代码。它之所以叫这个名字&#xff0c;是因为最初这类代码的唯一目的就是启动一个命令行 Shell&#xff08;例如 /bin/sh&#xf…

线性代数 | 行图像 / 列图像

注&#xff1a;本文为 “线性代数 | 行图像 / 列图像” 相关合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 MIT 线性代数笔记一 行图像和列图像 线性代数行图像与列图像解析 herosunly 已于 2022-01-25 15:34:26 …

Batch Normalization:深度学习中的“加速器”与“稳定器”

在深度学习的世界里&#xff0c;神经网络的训练常常充满了挑战。从复杂的梯度问题到漫长的收敛过程&#xff0c;每一个环节都可能成为阻碍我们前进的绊脚石。而今天&#xff0c;我们要深入探讨的 BatchNormalizationBatch NormalizationBatchNormalization&#xff08;批量归一…

软考备考①

一、数值及其转换和数据的表示1、数值及其转换①任意进制到十进制以二进制为例&#xff0c;以小数点做分割&#xff0c;小数点以左从二的零次方开始&#xff0c;小数点以右从二的负一次方开始。②十进制到任意进制利用短除法③二进制到十六进制分为小数点前和小数点后&#xff…

小程序缓存数据字典

import { getDict } from /api/profile;const CACHE_KEY DICT_CACHE;let dictCache new Map();// 初始化时加载缓存const loadCache () > {const cache uni.getStorageSync(CACHE_KEY);if (cache) {dictCache new Map(JSON.parse(cache));}};// 保存缓存到Storageconst…

Java对象在内存中的布局详解

1、Java 对象内存布局&#xff08;HotSpot 虚拟机&#xff09;在 ​HotSpot 虚拟机​ 中&#xff0c;一个 Java 对象在堆内存中的存储布局可以分为以下几个部分&#xff1a;1、对象头&#xff08;Object Header&#xff09;​对象头是对象内存布局中最重要的部分之一&#xff0…

钾元素:从基础认知到多元应用与前沿探索

一、钾元素的基础认知1.1 钾元素的发现历程在人类历史的长河中&#xff0c;钾的化合物早早就进入了人们的视野&#xff0c;并在生活和生产中得到了应用。古代时期&#xff0c;人们就知晓草木灰里含有钾草碱&#xff0c;即碳酸钾 。在日常的洗涤活动中&#xff0c;碳酸钾发挥了重…

JAiRouter 配置文件重构纪实 ——基于单一职责原则的模块化拆分与内聚性提升

JAiRouter 配置文件重构纪实 ——基于单一职责原则的模块化拆分与内聚性提升 文章目录JAiRouter 配置文件重构纪实 ——基于单一职责原则的模块化拆分与内聚性提升一、背景&#xff1a;单体 YAML 的“熵增”困境二、重构策略&#xff1a;高内聚、低耦合的模块化方案2.1 拆分原则…