布隆过滤器(Bloom Filter)初学习
目录
1、布隆过滤器是什么
2、布隆过滤器的优缺点
3、使用场景
4、⭐基于Redis的布隆过滤器插件安装
4.1 下载布隆过滤器
4.2 创建文件夹并上传文件
4.3 安装gcc
4.4 解压RedisBloom压缩包
4.5 在解压好的文件夹下输入make
4.6 将编译的好的插件拷贝到docker redis容器中
4.7 修改配置文件,并重启Redis
4.8 查看操作日志
4.9 进入redis客户端查看,测试
4.10 常用命令:
小结
1、布隆过滤器是什么
布隆过滤器(Bloom Filter)是一种空间效率非常高的随机数据结构,用于判断一个元素是否在一个集合中。与传统的哈希表或者二叉搜索树等数据结构不同,布隆过滤器可以在空间和时间上做出很多妥协,从而实现高效的查询和插入操作。
布隆过滤器的核心思想是使用多个哈希函数来将元素映射到位数组中的多个位置上。当一个元素被加入到布隆过滤器中时,它会被多次哈希,并将对应的位数组位置设置为1。当需要判断一个元素是否在布隆过滤器中时,我们只需将该元素进行多次哈希,并检查对应的位数组位置是否都为1,如果其中有任意一位为0,则说明该元素不在集合中;如果所有位都为1,则说明该元素可能在集合中(因为有可能存在哈希冲突),需要进一步检查。
示例图:

图片来源:https://baijiahao.baidu.com/s?id=1760676476679974031&wfr=spider&for=pc
2、布隆过滤器的优缺点
布隆过滤器是一种概率型数据结构,用于快速判断一个元素是否存在于一个集合中。它具有以下优点和缺点:
优点:
- 高效的查询速度:布隆过滤器的查询时间复杂度是O(1),即使在大规模数据集中也能快速判断一个元素是否存在。
- 空间效率高:相比于其他数据结构,布隆过滤器所需的空间通常较小。它利用位数组和哈希函数来表示元素的存在状态,因此占用的内存相对较少。
- 支持高并发场景:由于布隆过滤器的查询操作是无锁的,并且不需要访问磁盘或网络,因此适用于高并发的场景。
缺点:
- 可能出现误判:布隆过滤器存在一定的误判率,即可能将不存在的元素误判为存在。这是由于哈希函数的冲突和位数组的碰撞造成的。误判率随着数据量的增加而增加,可以通过调整哈希函数个数和位数组大小来降低误判率,但不能完全消除。
- 不支持删除操作:布隆过滤器设计初衷是用于判断元素是否存在,而不支持删除操作。一旦一个元素被添加到布隆过滤器中,就无法从布隆过滤器中删除。如果需要删除元素,需要使用其他数据结构辅助操作。
- 对内存敏感:布隆过滤器对内存的使用非常敏感。为了降低误判率,需要增加位数组的大小和哈希函数的个数,这会增加内存的消耗。在内存资源有限的情况下,需要权衡空间和误判率。
综上所述,布隆过滤器适用于对查询速度要求高、对误判率可以容忍的场景,但需要注意其不支持删除操作和对内存敏感的特点。在实际应用中,需要根据具体需求和数据规模来选择是否使用布隆过滤器。
3、使用场景
常见的使用场景包括:
-
网页黑名单过滤:将恶意网站的 URL 存储到布隆过滤器中,当用户访问时,可以快速判断该网站是否为恶意网站,从而进行拦截或提示。
-
垃圾邮件过滤:将已知的垃圾邮件的特征(如发件人、主题、内容等)存储到布隆过滤器中,当新邮件到来时,可以快速判断是否为垃圾邮件,从而进行过滤。
-
⭐缓存穿透问题解决:当缓存中不存在某个键值对时,可以先通过布隆过滤器判断该键是否存在,如果不存在,则直接返回空值,避免了对数据库等后端存储的不必要查询,从而提高了系统的性能。

图片来源:Redis6-雪崩、击穿、穿透、分布式锁 - 知乎

图片来源:什么是布隆过滤器? - 知乎
需要注意的是,布隆过滤器的误判率是无法避免的,因此在使用时需要根据具体场景进行权衡和调整。
4、⭐基于Redis的布隆过滤器插件安装
4.1 下载布隆过滤器
首先需要安装完成Redis(安装过程略),然后布隆过滤器便可以作为一个插件加载到Redis服务器直接使用。
Linux版本:https://github.com/RedisBloom/RedisBloom/archive/v2.2.4.tar.gz
4.2 创建文件夹并上传文件

4.3 安装gcc


4.4 解压RedisBloom压缩包

4.5 在解压好的文件夹下输入make

4.6 将编译的好的插件拷贝到docker redis容器中

4.7 修改配置文件,并重启Redis

43 # loadmodule /path/to/my_module.so
44 # loadmodule /path/to/other_module.so
45
46 loadmodule /usr/local/etc/redis/redisbloom.so
4.8 查看操作日志

4.9 进入redis客户端查看,测试

4.10 常用命令:
- bf.add:添加元素
- bf.madd:批量添加元素
- bf.exists:检索元素是否存在
- bf.mexists:检索多个元素是否存在
- bf.reserve:自定义布隆过滤器,设置key,error_rate和initial_size
小结
由于布隆过滤器不需要存储元素本身,而只需要存储元素的哈希值,因此它的空间效率非常高。同时,由于布隆过滤器使用多个哈希函数来减少哈希冲突的概率,因此它的查询效率也比较高。但是,布隆过滤器存在一定的误判率,即有可能将不在集合中的元素误判为在集合中,这是由于哈希冲突和位数组大小等因素造成的。因此,在使用布隆过滤器时,需要根据具体情况来选择合适的哈希函数个数和位数组大小,以控制误判率。
参考:
硬核|Redis 布隆(Bloom Filter)过滤器原理与实战
布隆过滤器 Bloom Filter - 知乎
什么是布隆过滤器? - 知乎
Redis6-雪崩、击穿、穿透、分布式锁 - 知乎
感谢阅读,码字不易,多谢点赞!如有不当之处,欢迎反馈指出,感谢!

相关文章:
布隆过滤器(Bloom Filter)初学习
目录 1、布隆过滤器是什么 2、布隆过滤器的优缺点 3、使用场景 4、⭐基于Redis的布隆过滤器插件安装 4.1 下载布隆过滤器 4.2 创建文件夹并上传文件 4.3 安装gcc 4.4 解压RedisBloom压缩包 4.5 在解压好的文件夹下输入make 4.6 将编译的好的插件拷贝到docker redis容…...
“深入探讨操作系统和虚拟化技术“
目录 引言1.操作系统1.1.什么是操作系统1.2.常见操作系统1.3.个人版本和服务器版本的区别1.4.Linux的各个版本 2.安装VMWare虚拟机1.VMWare虚拟机介绍2.VMWare虚拟机安装3.VMWare虚拟机配置 3.安装配置Windows Server 2012 R24.完成电脑远程访问电脑5.服务器环境搭建配置jdk配置…...
远程连接异地主机可能遇到的问题及处理
0.现状 公司的一套系统内部有多个节点的内网,要把数据上传至客户的办公网环境中的服务器。客户办公网为我们提供了一台类似路由的设备,办公网无法让内网地址的数据包透传至服务器。现场条件所限,只有有限数量的技术服务人员可以维持…...
使用 PointNet 进行3D点集(即点云)的分类
点云分类 介绍 无序3D点集(即点云)的分类、检测和分割是计算机视觉中的核心问题。此示例实现了开创性的点云深度学习论文PointNet(Qi 等人,2017)。 设置 如果使用 colab 首先安装 trimesh !pip install trimesh。 import os import glob import trimesh import numpy as…...
高通平台GPIO引脚复用指导
高通平台GPIO引脚复用指导 1. 概述1.1 平台有多少个GPIO?1.2 这些GPIO都有哪些可复用的功能? 2. 软件配置2.1 TZ侧GPIO配置2.2 SBL侧GPIO配置2.3 AP侧GPIO配置2.3.1 Linux DTS机制与设备驱动模型概述2.3.2高通平台的pinctrl控制器2.3.2.1 SDX12 CPU pinc…...
华为机试题:HJ5 进制转换
目录 第一章、算法题1.1)题目描述1.2)解题思路与答案1.3)派仔的解题思路与答案1.3)牛客链接 友情提醒: 先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。 第一章、算法题 1.…...
面试算法37:小行星碰撞
题目 输入一个表示小行星的数组,数组中每个数字的绝对值表示小行星的大小,数字的正负号表示小行星运动的方向,正号表示向右飞行,负号表示向左飞行。如果两颗小行星相撞,那么体积较小的小行星将会爆炸最终消失…...
ROS学习记录2018.7.10
ROS学习记录2018.7.10 1.ROS基础了解 开源机器人操作系统ROS(robot operation system) 分级: 1.计算图集(一种网络结构) 1.节点:执行运算的进程(做基础处理的单元)2.消息&#x…...
OPC UA:工业领域的“HTML”
OPC UA是工业自动化领域的一项重要的通信协议。它的特点是包括了信息模型构建方法。能够建立工业领域各种事物的信息模型。在工业自动化行业,OPCUA 类似互联网行业的HTTP协议和“HTML”语言。能够准确,可靠地描述复杂系统中各个元素,并且实现…...
【golang】Windows环境下Gin框架安装和配置
Windows环境下Gin框架安装和配置 我终于搞定了Gin框架的安装,花了两三个小时,只能说道阻且长,所以写下这篇记录文章 先需要修改一些变量,这就需要打开终端,为了一次奏效,我们直接设置全局的: …...
多测师肖sir_高级金牌讲师__接口测试之tonken (5.6)
接口测试之tonken 网站:http://shop.duoceshi.com/login?redirect2Fdashboard 第一个接口:uiid接口 uiid接口url:http://manage.duoceshi.com/auth/code test中语句: var jsonData JSON.parse(responseBody); postman.setEnvi…...
C++常见面试问题之内存对齐
一、内存对齐是什么 1.内存对齐是什么 还是用一个例子带出这个问题,看下面的小程序,理论上,32位系统下,int占4byte,char占一个byte,那么将它们放到一个结构体中应该占415byte;但是实际上&…...
网络协议--TCP:传输控制协议
17.1 引言 本章将介绍TCP为应用层提供的服务,以及TCP首部中的各个字段。随后的几章我们在了解TCP的工作过程中将对这些字段作详细介绍。 对TCP的介绍将由本章开始,并一直包括随后的7章。第18章描述如何建立和终止一个TCP连接,第19和第20章将…...
网络协议--BOOTP:引导程序协议
16.1 引言 在第5章我们介绍了一个无盘系统,它在不知道自身IP地址的情况下,在进行系统引导时能够通过RARP来获取它的IP地址。然而使用RARP有两个问题:(1)IP地址是返回的唯一结果;(2)…...
33基于MATLAB的对RGB图像实现中值滤波,均值滤波,维纳滤波。程序已通过调试,可直接运行。
基于MATLAB的对RGB图像实现中值滤波,均值滤波,维纳滤波。程序已通过调试,可直接运行。 33 MATLAB、图像处理、维纳滤波 (xiaohongshu.com)...
WPF十六(页面内嵌加载)
在WPF中进行页面内嵌的加载 当存在一定需求时,比如当前页面C左侧是一个A页面,右侧是一个B页面,A页面是一个公用页面时,此时只需要做内嵌A页面,然后B页面进行正常处理,既可以节省时间,又做到了WP…...
JAVA基础(JAVA SE)学习笔记(九)异常处理
前言 1. 学习视频: 尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第三阶段:Java高级应用 9.异常处理 10.多线程 11.常用类和基础API 12.集合框架 13.泛型 14…...
Miniconda、Vscode下载和conda源、pip源设置
1、常用软件下载 1、Miniconda软件下载: windows网址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?CS&OA 2、最新版Miniconda下载网址:https://docs.conda.io/projects/miniconda/en/latest/ 3、常用代码编辑器VsCode下…...
CAN接口的PCB Layout规则要求汇总
随着时代高速发展,控制器局域网(CAN)接口的应用越来越广泛,尤其是在汽车电子、航空航天等领域中发挥着重要作用,为了确保CAN接口的可靠性和稳定性,工程师必须在其PCB Layout方面下功夫,下面来看…...
IP网络矿用打点紧急广播方案
IP网络矿用打点紧急广播方案 一、概述 目前,随着计算机网络技术的迅速普及,信息化已经走向煤矿。很多煤矿都陆续具有了稳定可靠、覆盖矿井上下的工业以太网。科学技术的不断进步和信息化矿山建设步伐的不断加快,井下工业以太网将逐渐得到推…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
