布隆(BloomFilter)过滤器——全面讲解,建议收藏

上面这句介绍比较全面的描述了什么是布隆过滤器,如果还是不太好理解的话,就可以把布隆过滤器理解为一个set集合,我们可以通过add往里面添加元素,通过contains来判断是否包含某个元素。由于本文讲述布隆过滤器时会结合Redis来讲解,因此类比为Redis中的Set数据结构会比较好理解,而且Redis中的布隆过滤器使用的指令与Set集合非常类似(后续会讲到)。

学习布隆过滤器之前有必要先聊下它的优缺点,因为好的东西我们才想要嘛!布隆过滤器的优点:

布隆过滤器的缺点:

布隆过滤器可以告诉我们“某样东西一定不存在或者可能存在”,也就是说布隆过滤器说这个数不存在则一定不存,布隆过滤器说这个数存在可能不存在(误判,后续会讲),**利用这个判断是否存在的特点可以做很多有趣的事情。

布隆过滤器它实际上是一个很长的二进制向量和一系列随机映射函数。以Redis中的布隆过滤器实现为例,Redis中的布隆过滤器底层是一个大型位数组(二进制数组)+多个无偏hash函数。一个大型位数组(二进制数组):

多个无偏hash函数:无偏hash函数就是能把元素的hash值计算的比较均匀的hash函数,能使得计算后的元素下标比较均匀的映射到位数组中。

如下就是一个简单的布隆过滤器示意图,其中k1、k2代表增加的元素,a、b、c即为无偏hash函数,最下层则为二进制数组。

在布隆过滤器增加元素之前,首先需要初始化布隆过滤器的空间,也就是上面说的二进制数组,除此之外还需要计算无偏hash函数的个数。布隆过滤器提供了两个参数,分别是预计加入元素的大小n,运行的错误率f。布隆过滤器中有算法根据这两个参数会计算出二进制数组的大小l,以及无偏hash函数的个数k。它们之间的关系比较简单:

如下地址是一个免费的在线布隆过滤器在线计算的网址:

往布隆过滤器增加元素,添加的key需要根据k个无偏hash函数计算得到多个hash值,然后对数组长度进行取模得到数组下标的位置,然后将对应数组下标的位置的值置为1

例如,key=Liziba,无偏hash函数的个数k=3,分别为hash1、hash2、hash3。三个hash函数计算后得到三个数组下标值,并将其值修改为1.如图所示:

布隆过滤器最大的用处就在于判断某样东西一定不存在或者可能存在,而这个就是查询元素的结果。其查询元素的过程如下:

关于误判,其实非常好理解,hash函数在怎么好,也无法完全避免hash冲突,也就是说可能会存在多个元素计算的hash值是相同的,那么它们取模数组长度后的到的数组索引也是相同的,这就是误判的原因。例如李子捌和李子柒的hash值取模后得到的数组索引都是1,但其实这里只有李子捌,如果此时判断李子柒在不在这里,误判就出现啦!因此布隆过滤器最大的缺点误判只要知道其判断元素是否存在的原理就很容易明白了!

布隆过滤器对元素的删除不太支持,目前有一些变形的特定布隆过滤器支持元素的删除!关于为什么对删除不太支持,其实也非常好理解,hash冲突必然存在,删除肯定是很苦难的!

v1.1.1

v2.2.6

以下安装全部在指定目录下完成,可以选择一个合适的统一目录进行软件安装和管理。

4.2.1下载插件压缩包

tar-zxvfv2.2.6.tar.gz4.2.3编译插件

编译成功后看到redisbloom.so文件即可

4.3.1Redis配置文件修改

loadmodule/usr/local/soft/RedisBloom-2.2.6/redisbloom.soredis.conf配置文件中预置了loadmodule的配置项,我们可以直接在这里修改,后续修改会更加方便。

保存退出后一定要记得重启Redis!保存退出后一定要记得重启Redis!保存退出后一定要记得重启Redis!

4.3.2测试是否成功

Redis集成布隆过滤器的主要指令如下:

连接客户端进行测试,如果指令有效则证明集成成功

如果出现如下情况(error)ERRunknowncommand,可以通过如下方法检查:

bf.add表示添加单个元素,添加成功返回1

bf.madd表示添加多个元素

bf.exists表示判断元素是否存在,存在则返回1,不存在返回0

bf.mexists表示判断多个元素是否存在,存在的返回1,不存在的返回0

使用布隆过滤器的方式有很多,还有很多大佬自己手写的,我这里使用的是谷歌guava包中实现的布隆过滤器,这种方式的布隆过滤器是在本地内存中实现。

com.google.guavaguava29.0-jre6.2编写测试代码packagecom.lizba.bf;importcom.google.common.hash.BloomFilter;importcom.google.common.hash.Funnels;/***

*布隆过滤器测试代码*

**@Author:Liziba*@Date:2021/8/2914:51*/publicclassBloomFilterTest{/**预计插入的数据*/privatestaticIntegerexpectedInsertions=10000000;/**误判率*/privatestaticDoublefpp=0.01;/**布隆过滤器*/privatestaticBloomFilterbloomFilter=BloomFilter.create(Funnels.integerFunnel(),expectedInsertions,fpp);publicstaticvoidmain(String[]args){//插入1千万数据for(inti=0;i

在guava包中的BloomFilter源码中,构造一个BloomFilter对象有四个参数:

综上三次测试可以得出如下结论:

Redis经常会被问道缓存击穿问题,比较优秀的解决办法是使用布隆过滤器,也有使用空对象解决的,但是最好的办法肯定是布隆过滤器,我们可以通过布隆过滤器来判断元素是否存在,避免缓存和数据库都不存在的数据进行查询访问!在如下的代码中只要通过bloomFilter.contains(xxx)即可,我这里演示的还是误判率!

THE END
1.过滤的原理是什么?相似问题 过滤是化学原理吗 永清过滤的过滤原理 微孔过滤的原理是什么? 特别推荐 热点考点 2022年高考真题试卷汇总 2022年高中期中试卷汇总 2022年高中期末试卷汇总 2022年高中月考试卷汇总 二维码 回顶部?2021 作业帮?联系方式:service@zuoyebang.com?作业帮协议...https://www.zybang.com/question/25e89ba66570a193a7cf680ad334a485.html
2.何谓过滤?过滤原理的原理是什么?点击查看答案https://www.netkao.com/shiti/825451/2914272wclv53z5og.html
3.过滤机的作用原理是什么?用过滤介质把容器分隔为上、下腔即构成简单的过滤器。悬浮液加入上腔,在压力作用下通过过滤介质进入下腔成为滤液,固体颗粒被截留在过滤介质表面形成滤渣(或称滤饼)。过滤机在过程中过滤介质表面积存的滤渣层逐渐加厚,液体通过滤渣层的阻力随之增高,过滤速度减小。当滤室充满滤渣或过滤速度太小时,停止过滤,清除滤渣...http://www.jk-pump.com/news_show/guolvjidezuoyongyuanlishishenme-3644.html
4.什么是过滤?过滤的分类及原理什么是过滤?过滤的分类及原理 过滤是使含悬浮物的废水流过具有一定孔隙率的过滤介质(过滤滤料),水中的悬浮物被截留在介质表面或内部而除去。 1、根据所采用的过滤介质不同,可将过滤分为下列四类: (1)格筛过滤 (2)微孔过滤 (3)膜过滤 (4)深层过滤http://www.hndfsw.com/news/445.html
5.什么是切向流过滤,为什么要使用切向流过滤?3、切向流过滤原理 切向流过滤又称为“错流”,压力驱动流体通过滤膜表面,冲刷去除其上截留的分子,极大地减少了浓差极化;在滤膜两侧形成压力,小于膜孔径的溶质和溶剂分子透滤膜,大于膜孔径的又回到原液中,多次循环,完成浓缩分离;在死端过滤(直流过滤)中,增加过滤压力,且在膜表面容易形成浓差极化,分离速度慢,效果差...http://www.guidling.cn/newsdetail-461.html
1.自制鱼缸过滤器的优缺点介绍过滤器的原理是什么→MAIGOO知识自制鱼缸过滤器的优缺点介绍 过滤器的原理是什么 摘要:自制鱼缸过滤器是用于养鱼器具中的净水补氧装置,其目的是去除水中粪便等污物,保持水体清澈、氧气充足、没有有害物质、没有污染,适合鱼的生长。鱼缸内有了好的过滤装置,才能养好鱼并少换水。那么,自制鱼缸过滤器的优缺点有哪些?桶式外置式过滤器一般是密闭式...https://www.maigoo.com/goomai/161860.html
2.家用净水器的过滤原理是什么?家用净水器的过滤原理主要包括以下几种方式:1. 物理过滤:使用滤网或滤芯,如活性炭、PP棉等,去除水中的悬浮物、泥沙和较大颗粒的杂质。物理过滤通过孔径大小来阻挡不同尺寸的颗粒。2. 化学过滤:活性炭吸附是常见的化学过滤方式,它能去除水中的异味、氯、重金属等化学物质。活性炭的表面具有很强的吸附能力,可以有效...https://www.jia.com/wenda/a-519365.html
3.水处理过滤装置的原理是什么?去除水中一些对生产、生活不需要的有害物质的过程。是为了适用于特定的用途而对水进行的沉降、过滤、...https://m.to8to.com/ask/k532209.html
4.什么是前置过滤器?前置过滤器原理作用及类型解析什么是前置过滤器?前置过滤器原理、作用及类型解析 正在选购家用净水器的朋友,在咨询和了解的时候,一定听说过前置过滤器,商家往往推荐将前置过滤器与净水器配套使用,或者在经济条件不宽裕的情况下,单独使用,也能起到很好的净化水质的作用。那么,这种前置净水器真的有用吗,它是怎样起作用的呢?https://www.yoojia.com/ask/17-11812062511077951992.html
5.净水器原理到底是什么?这不仅减少了水资源的浪费,并且空气制水机只需插电,就能将流动的空气变成源源不断的水源,通过3级空气过滤,4级水过滤,鲜榨出航天员级饮用水。 超滤和反渗透净水器原理有什么区别 看了超滤净水器和反渗透净水器的原理图解后,我想大家心里多多少少应该有点底了吧!反渗透净水器过滤后的水水质安全,可以去除水中各种...https://www.fndtech.com/technologydetail/791.html
6.火灾逃生面具是如何过滤烟尘的防烟面具防护原理是什么火灾逃生面具一般配置在旅馆、办公室、医院、商场、机场候机厅、娱乐场所等公共场所和住宅,供人们在发生火灾时逃生使用。火灾逃生面具过滤烟尘的原理跟防毒面具防有毒有害物一样,主要是通过滤毒罐这个过滤装置来过滤烟尘的。 火灾逃生面具滤毒罐结构 火灾逃生面具滤毒罐的内部共有3层结构,分别是干燥剂层,触媒层(霍...https://www.dehsm.com/article-1430.html
7.Redis系列9.Redis布隆过滤器BloomFilter布隆过滤器原理 布隆过滤器(Bloom Filter) 是一种专门用来解决去重问题的高级数据结构。 实质就是一个大型位数组和几个不同的无偏hash函数(无偏表示分布均匀)。由一个初值都为零的bit数组和多个个哈希函数构成,用来快速判断某个数据是否存在。但是跟 HyperLogLog 一样,它也一样有那么一点点不精确,也存在一定的误判...https://developer.aliyun.com/article/1414714
8.水处理是干什么的工作流程设备大全去离子法的目的是将溶解于水中的无机离子排除,与硬水软化器一样,也是利用离子交换树脂的原理。 5、逆渗透法 逆渗透法可以有效的清除溶解于水中的无机物,有机物,细菌,热原及其它颗粒等,是透析用水之处理中最重要的一环。 6、超过滤法 超过滤法与逆渗透法类似,也是使用半透膜,但它无法控制离子的清除,因为膜之...https://www.cnpp.cn/focus/28513.html
9.过滤器的使用及其实现原理-Servlet规范中的Filter过滤器可以用来解决这个问题。 我们在上一节课《course26》中写了这个改造 2.什么是Filter,有什么用,执行原则是什么?56 -Filter是过滤器。 -Filter可以在Servlet执行目标程序之前添加代码。也可以在目标Servlet执行后添加代码。过滤规则可以在之前和之后添加。 https://www.tulingxueyuan.cn/tlzx/jsp/3234.html
10.什么是流量清洗?流量清洗的原理和作用是什么?流量清洗是指在网络中对流量进行筛选和处理,以过滤出有效的、合法的流量,并将恶意或无效的流量从网络中清除的过程。这一过程通常由专门的流量清洗设备或服务提供商来完成。在网络安全领域,流量清洗是一项重要的防御措施,可以有效地保护网络资源免受各种类型的网络攻击。以下是对流量清洗的原理和作用进行多个角度的探讨:...https://www.kkidc.com/market/7261.html
11.什么是布隆过滤器?你学会了吗?爬虫过滤。 邮箱垃圾邮件过滤。 黑名单过滤。 大数据去重。 防止缓存穿透。 布隆过滤器原理 布隆过滤器的原理是当一个元素加入到集合中时,通过K个哈希函数将该元素映射到一个位数组中的K个点,并将它们置为1。检索时,我们只需要看这些点是否都为1,就可以(大概)知道它是否存在于集合中。如果这些点中的任何一个有...https://www.51cto.com/article/745339.html
12.详解Java中布隆过滤器(BloomFilter)原理及其使用嘲java正是由于布隆过滤器的数据结构仅需要存储“0”或“1”,因此所占用内存极少,这也是布隆过滤器的一大优点。 2.2 布隆过滤器的检索和插入原理 从上图布隆过滤器的数据结构图和定义的关键信息我们可以知道:布隆过滤器实际上是个很长的二进制数组,作用是检索一个元素是否存在我们的集合之中。那么布隆过滤器是如何通过上述...https://www.jb51.net/program/285139yok.htm
13.推荐系统算法实战协同过滤CF算法(CollaborativeFiltering...协同过滤分为基于用户的协同过滤和基于标的物(物品)的协同过滤两类算法。下面我们对协同过滤的算法原理来做详细的介绍。 推荐算法种类很多,但是目前应用最广泛的就是协同过滤算法。 协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分...https://cloud.tencent.com/developer/article/1558722
14.禁止装前置过滤器?很多业主为此与物业起争执,后才明白错怪物业...听师傅分析完,才懂原来现在不少小区都禁止业主安装前置过滤器,是因为前置过滤器的安装、维修、管理太繁琐。看完才明白物业的良苦用心! 二、前置过滤器的工作原理是什么? 前置过滤器,顾名思义代表了两个意思,分别是前置和过滤,前置是指它的安装位置,过滤就是它的作用;所以前置过滤器都是安装在水表后面进水主管道...https://zhishi.fang.com/jiaju/qg_590933.html
15.化学实验报告合集15篇2):实验原理,是写你这次实验操作是依据什么来完成的,一般你的实验书上都有,你总结一下就行。(就可以用上面的'反应方程式) 3):实验用品,包括实验所用器材,液体和固体药品等。 (如酒精灯,滤纸,还有玻璃棒,后两者用于过滤,这个应该是要的吧。) 4):实验步骤:实验书上也有 (就是你上面说的,氢氧化钠溶液中加...https://www.ruiwen.com/gongwen/baogao/1247259.html