首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

go 布隆过滤器_布隆过滤器 redis

拉长时间业务肯定是接受不了的,但是按照以往的经验,这部分数据并不全部需要处理,可能仅有一半真正需要调用A服务,所以我们可以把1亿数据给过滤掉。 这里我们维护一个布隆过滤器来进行数据的过滤。...布隆过滤器的概念(百科) 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。...它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 2. 布隆过滤器应用场景 deny list 数据判重 预过滤 3....特性 容易发现,布隆过滤器存在假阳性的情况,即将不在集合中的元素误判为在集合中。过滤器中的元素个数越多,假阳性的可能性越大。...上代码 // CalBloomSize 计算布隆过滤器位图大小 // elemNum 元素个数 // errorRate 误判率 func CalBloomSize(elemNum uint64, errRate

61820

布隆过滤器的原理_什么是布隆过滤器

作用嘛就是用来过滤非法key,避免缓存穿透(请求直接打到数据库),布隆过滤器底层用的是位数组,不仅节省空间,性能也嘎嘎猛,而且占用内存不会随着使用变大 先贴demo后BB public class MyBloomFilter...Integer currentBeanCount = 0; //你的布隆过滤器容量 private int DEFAULT_SIZE = Integer.MAX_VALUE; //bit数组,用来存放结果...if (size <= (2 << 8)) throw new RuntimeException("size is too small"); DEFAULT_SIZE = size; } //获取当前过滤器的对象数量...,5 对应位数组:[1,0,1,0,0,1] 判断某个未知key存不存在的时候,假设我们计算出来的下标是0,2,4 对应位数组:[1,0,1,0,1,0] 此时位数组内5对应下标值为0,而已知key...位数组的5对应下标位1,说明这两个一定不是同一个key 相反,如果某个key计算出来的下标为[1,0,1,0,0,1],只能说这个key可能存在,因为这个位置可能是其它key计算出来的 如果对上面的hash

32710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    布隆过滤器

    这就是布隆过滤器的基本思想。  ...手动Bloom Filter 实现 我们上面已经说了布隆过滤器的原理,知道了布隆过滤器的原理之后就可以自己手动实现一个了。...如果你想要手动实现一个的话,你需要: 一个合适大小的位数组保存数据 几个不同的哈希函数 添加元素到位数组(布隆过滤器)的方法实现 判断给定元素是否存在于位数组(布隆过滤器)的方法实现。...fpp,bit数组大小的m的计算方式: (2)哈希函数选择 由预估数据量n以及bit数组长度m,可以得到一个hash函数的个数k: ​ 哈希函数的选择对性能的影响应该是很大的,一个好的哈希函数要能近似等概率的将字符串映射到各个...布隆过滤器就是其中的 Module。

    44130

    布隆过滤器

    什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在...实现原理 与HashMap比较想象,不同之处在于布隆过滤器是存储的Bit位数组,内容值只有1 与 0 非常显著的减少了存储大小。所以布隆过滤器只能判断是否匹配,而无法获取对应匹配值。...了解HashMap数据结构的同学都应该知道HashMap会有概率发生碰撞,在发生碰撞时会生成链表或红黑树来解决,那布隆过滤器是如何解决这个问题的呢? 布隆过滤器数据结构 ?...只能通过增加计算Hash的条数或增加数组长度来减少碰撞可能。 布隆过滤器如何支持删除 根据上边了解到的信息,我们知道因布隆过滤器是使用bit位数组存储的,如果支持删除操作的话,可能会影响其他值的匹配。...那么我们还有其他方式来使布隆过滤器支持删除吗? ? 我们可以改变一下数据结构,将数组改为计数形式就可以实现,用空间来换功能。

    65920

    布隆过滤器

    前言 前两天, 一个大学同学问我布隆过滤器, 我本想反手甩他一篇我写的文章, 尴尬的是我找了找发现没有写过.......既然一个数字会发生碰撞, 那我一个链接生成10个数字, 你如果10个数字同时碰撞的概率就小得多了吧. 至此, 布隆过滤出来了....如果你需要确定的知道它有没有存在, 就只能将它自身进行存储, 在节省空间的时候本身就已经丢失了部分精度. 但是无妨, 我们的爬虫还是能够容忍这种情况的. 介绍完毕, 这就是布隆过滤器了....完事 看了上面, 布隆的基本概念也齐活了. 布隆的特点如下: 说你不在, 你一定不在 说你在, 你可能在 其适合于这种允许存在一定误判的场景. 也就是宁可放过一个, 绝不错杀一千的场景....看了布隆过滤器, 其涉及的大小只有两个, 1. 数组的大小. 2. hash函数的个数. 而选取合适的值就可以尽量的降低误判概率. 涉及高深的数学领域, 咱也不太懂.

    47720

    布隆过滤器

    ---- 在Redis的缓存穿透中了解到布隆过滤器,不禁想了解其奇妙之处 1....布隆过滤器的作用 判断传入数据是否已经存在,由这个基本功能可以泛生出: 防止Redis缓存穿透 海量数据去重 垃圾邮件过滤 2....什么是布隆过滤器 布隆过滤器(Bloom Filter)是1970年由一个叫布隆的人提出的,它本质是一个很长的二进制向量(位数组)和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。...其优点是空间效率和查询时间都比一般的算法好太多,这是布隆过滤器的出名之处。缺点是有一定的误识别率和删除困难 在布隆过滤器的位数组中,每个元素占一个位(1bit)其内容只能是0或1。...Hash值计算可能会有冲突,不同的数据 "存入" 布隆过滤器的结果可能相同,也就是说布隆过滤器 只能判断数据不存在,而无法明确判断数据存在。

    38410

    布隆过滤器

    背景 之前读吴军《数学之美》的时候提到布隆过滤器,觉得蛮有意思的,所以总结一下。...解决的问题 大数据量的时候, 判断一个元素是否在一个集合中。 实现原理 布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几个哈希函数。...假设位数组的长度为m,哈希函数的个数为k ? 布隆过滤器 以上图为例,具体的操作流程:假设集合里面有3个元素{x, y, z},哈希函数的个数为3。...移除集合中的元素 这个在布隆过滤器中是不允许的,理解原理我们就知道,如果将是1的位置重置成0会影响其他元素是不是在集合中的判断。...对于关小黑屋再放出来这种需求,我们可以换一个思路,再加一个布隆过滤器————“被移除的元素”,当然现在公司都比较土豪,直接用redis存一个过期时间就可以,那就不在我们讨论之列了,布隆过滤器的初衷是用少许的误判来极大的节省空间

    1.1K10

    什么是布隆过滤器?如何实现布隆过滤器?

    布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。...1.布隆执行过程 布隆过滤器的具体执行步骤如下: 在 Redis 中创建一个位数组,用于存储布隆过滤器的位向量。 初始化多个哈希函数,并将每个哈希函数的计算结果对应的位数组位置设置为 1。...添加元素到布隆过滤器时,对元素进行多次哈希计算,并将对应的位数组位置设置为 1。 查询元素是否存在时,对元素进行多次哈希计算,并检查对应的位数组位置是否都为 1。...2.布隆使用场景 布隆过滤器的主要使用场景有以下几个: 大数据量去重:可以用布隆过滤器来进行数据去重,判断一个数据是否已经存在,避免重复插入。...3.如何实现布隆过滤器? 在 Redis 中不能直接使用布隆过滤器,但我们可以通过 Redis 4.0 版本之后提供的 modules (扩展模块) 的方式引入,它的实现步骤如下。

    24910

    布隆过滤器

    布隆过滤器redis第三方扩展库布隆过滤器github地址类似的还有 counting bloomcuckoo 布谷鸟过滤器wget https://github.com/RedisBloom/RedisBloom.../refs/heads/master.zipunzip master.zipcd RedisBloom-masterll#里边有个Makefile文件make#执行后多了一个redisbloom.so的扩展库...service redis_6379 stopredis-server /etc/redis/6379.conf --loadmodule opt/lnf/redis5/redisbloom.so启动了带布隆的...redis通过redis-cli -p 6379 连上后输入bf可以看到多了很多bf、cf的命令布隆过滤器用来解决缓存穿透问题比如网站有的数据只有1.2.3,但用户输入4来查询,缓存里没有,就直接向数据库去查询...,但数据库其实也没有啊,这样如果很多这种情况(现实中也存在),就直接穿透到数据库,让数据库执行查询且是空的查询,这样就给数据库增加了不必要的压力图片图片

    29730

    布隆过滤器

    什么是布隆过滤器   布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。...当判断A是否存在时,按照写入的计算方式,计算如果值都为1,则A存在,否则A不存在。...的时候将需要缓存的数据放在布隆过滤器中。...缺点及改进   布隆过滤器的缺点主要是有一定的误识别率和删除困难,错误识别率可以使用google工具来指定识别率,但是无法达到100%。   ...目前我们知道布隆过滤器可以支持 add 和 isExist 操作,那么 delete 操作可以么,答案是不可以,例如上图中的 bit 位 4 被两个值共同覆盖的话,一旦你删除其中一个值例如 “tencent

    64920

    布隆过滤器

    布隆过滤器 1、布隆过滤器原理 1.1 什么是布隆过滤器   布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。...布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。   ...如图所示:   查询过程   布隆过滤器主要作用就是查询一个数据,在不在这个二进制的集合中,查询过程如下:   1、通过K个哈希函数计算该数据,对应计算出的K个hash值   2、通过hash值找到对应的二进制的数组下标...:计算元素的数量 比如预计有多少个sku bloomFilter.tryInit(10001,0.001); } } 2.2 给商品详情页添加布隆过滤器 1、查看商品详情页添加布隆过滤器...布隆过滤器指导有哪些数据,这样别人使用随机数攻击的时候直接就给他返回,不用再去查Redis了。

    64020

    布隆过滤器

    本文将详解布隆过滤器的相关算法和参数设计,在此之前希望大家可以先通过谷歌黑板报的数学之美系列二十一 - 布隆过滤器(Bloom Filter)来得到些基础知识。 一....在下面的介绍中n为元素数,m为布隆过滤器或哈希表的slot数,k为布隆过滤器重hash function数。...误判概率的证明和计算 假设布隆过滤器中的hash function满足simple uniform hashing假设:每个元素都等概率地hash到m个slot中的任何一个,与其它元素被hash到哪个slot...设计和应用布隆过滤器的方法 应用时首先要先由用户决定要add的元素数n和希望的误差率P。这也是一个设计完整的布隆过滤器需要用户输入的仅有的两个参数,之后的所有参数将由系统计算,并由此建立布隆过滤器。...系统首先要计算需要的内存大小m bits: 再由m,n得到hash function的个数: 至此系统所需的参数已经备齐,接下来add n个元素至布隆过滤器中,再进行query。

    83800

    布隆过滤器

    接下来看看布隆过滤器是怎么做的。 2....布隆过滤器原理: 布隆过滤器使用了布隆算法来存储数据,明确一点,布隆算法存储的数据不是 100% 准确的,即布隆过滤器认为这个 key 存在,实际上它也有可能不存在,如果它认为这个key 不存在,那么它一定不存在...可以使用 guava 中的布隆过滤器; 使用 hutools 工具包中的布隆过滤器; redis 有 bitMap,也可以用作布隆过滤器,推荐使用 redisson 构造布隆过滤器; 三、hutools...中的布隆过滤器源码分析 这里带大家分析一下 hutools 中的布隆过滤器源码,看看人家怎么实现的。...这个数组有五个不同实现的对象,可以简单地理解为 hutools 中的布隆过滤器用了五个 hash 函数去计算 key 对应的索引。

    39120

    布隆过滤器

    什么是布隆过滤器 布隆过滤器本质上是一种概率型的数据结构,用于检索一个元素是否在集合中,它将告诉你一个数据“一定不存在或可能存在。...布隆过滤器由一个很长的二进制向量(位向量、位数组、Bit Array)和一系列的随机映射函数组成。 布隆过滤器的优点是高效、占用空间少。但缺点是返回的结果是概率性的,而不是准确的。...当检索一个不存在于这个布隆过滤器中的元素w时,给出的结果却是w存在于该布隆过滤器中。 造成这种问题的原因是,布隆过滤器存在一定的误报率。...对于布隆过滤器的bit位数m,插入元素数量n,误报率p,哈希函数个数k,我们可以使用以下的公式在决定哈希函数个数和布隆过滤器长度。 ?...布隆过滤器的使用场景 根据布隆过滤器的特点,有以下的应用场景: 1、判定给定数据是否存在。 2、爬虫对于已经爬取过的url去重。 3、缓存穿透。 4、邮箱的垃圾邮件过滤、黑名单等。

    51230

    布隆过滤器

    首先,先来了解布隆过滤器的概念。 布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。...相比于我们平时常用的的 List、Map 、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。...理论情况下添加到集合中的元素越多,误报的可能性就越大;并且,存放在布隆过滤器的数据不容易删除。 布隆过滤器示意图 位数组中的每个元素都只占用 1 bit ,并且每个元素只能是 0 或者 1。...总结:一个名叫 Bloom 的人提出了一种来检索元素是否在给定大集合中的数据结构,这种数据结构是高效且性能很好的,但缺点是具有一定的错误识别率和删除难度。...并且,理论情况下,添加到集合中的元素越多,误报的可能性就越大。

    18720

    布隆过滤器原理以及应用_bitmap与布隆过滤器

    3.原理:布隆过滤器实际上就是一个字节数组,字节数组的值是0或1,在添加元素的时候,对值通过多个hash函数的计算,得到多个0,1然后在字节数组里面在相应的位置设置值。...这样处理完所有的值之后,一个完整的布隆过滤器就完成了。...之后就进入应用阶段了,判断值在不在布隆过滤器里面了,如果新输出的对象是之前处理放在布隆过滤器里面的,那就一定是存在,因为两次计算得到的hash值是一样的,肯定在,那对于新的对象了,这时就有可能会出现误杀了...,新的值的hash值可能与老的值hash一样,于是布隆过滤器就认为,这个值是黑名单里的了,会造成误杀的结果。...4.改进:通常误杀的话,可以通过两个方法去补救,再建立一个白名单,从布隆器本身去优化,降低误杀率。

    24920

    什么是布隆过滤器?如何实现布隆过滤器?

    布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。...1.布隆执行过程 布隆过滤器的具体执行步骤如下: 在 Redis 中创建一个位数组,用于存储布隆过滤器的位向量。 初始化多个哈希函数,并将每个哈希函数的计算结果对应的位数组位置设置为 1。...添加元素到布隆过滤器时,对元素进行多次哈希计算,并将对应的位数组位置设置为 1。 查询元素是否存在时,对元素进行多次哈希计算,并检查对应的位数组位置是否都为 1。...2.布隆使用场景布隆过滤器的主要使用场景有以下几个: 大数据量去重:可以用布隆过滤器来进行数据去重,判断一个数据是否已经存在,避免重复插入。...3.如何实现布隆过滤器?在 Redis 中不能直接使用布隆过滤器,但我们可以通过 Redis 4.0 版本之后提供的 modules (扩展模块) 的方式引入,它的实现步骤如下。

    26610

    Redis布隆过滤器

    布隆过滤器是什么 布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判。...Redis 官方提供的布隆过滤器到了 Redis 4.0 提供了插件功能之后才正式登场。...布隆过滤器的原理 每个布隆过滤器对应到 Redis 的数据结构里面就是一个大型的位数组和几个不一样的无偏 hash 函数。所谓无偏就是能够把元素的 hash 值算得比较均匀。 ?...注意:使用时不要让实际元素远大于初始化大小,当实际元素开始超出初始化大小时,应该对布隆过滤器进行重建,重新分配一个 size 更大的过滤器,再将所有的历史元素批量 add 进去 使用场景 缓存穿透会使用到布隆过滤器...布隆过滤器在 NoSQL 数据库领域使用非常广泛,我们平时用到的 HBase、Cassandra 还有 LevelDB、RocksDB 内部都有布隆过滤器结构,布隆过滤器可以显著降低数据库的 IO 请求数量

    52721

    浅谈布隆过滤器

    这种情况也造成了布隆过滤器的删除问题,因为布隆过滤器的每一个 bit 并不是独占的,很有可能多个元素共享了某一位。如果我们直接删除这一位的话,会影响其他的元素。...首先我们必须保证删除的元素的确在布隆过滤器里面。这一点单凭这个过滤器是无法保证的。另外计数器回绕也会造成问题。 在降低误算率方面,有不少工作,使得出现了很多布隆过滤器的变种。...Redis 官方提供的布隆过滤器到了 Redis 4.0 提供了插件功能之后才正式登场。布隆过滤器作为一个插件加载到 Redis Server 中,给 Redis 提供了强大的布隆去重功能。...上面使用的布隆过滤器只是默认参数的布隆过滤器,它在我们第一次 add 的时候自动创建。...Redis 还提供了自定义参数的布隆过滤器,bf.reserve 过滤器名 error_rate initial_size error_rate:允许布隆过滤器的错误率,这个值越低过滤器的位数组的大小越大

    59042
    领券