布隆过滤器原理及应用

1.先说下背景,肯定遇到这种情况,判断元素在不在一个集合里面,如果,集合里面的元素非常大,这个判断过程是非常耗时的,而且集合占用空间也很大。

2.应用场景,网页黑名单,垃圾邮件过滤,电话黑名单,url去重,内容推荐等。

3.原理:布隆过滤器实际上就是一个字节数组,字节数组的值是0或1,在添加元素的时候,对值通过多个hash函数的计算,得到多个0,1然后在字节数组里面在相应的位置设置值。这样处理完所有的值之后,一个完整的布隆过滤器就完成了。之后就进入应用阶段了,判断值在不在布隆过滤器里面了,如果新输出的对象是之前处理放在布隆过滤器里面的,那就一定是存在,因为两次计算得到的hash值是一样的,肯定在,那对于新的对象了,这时就有可能会出现误杀了,新的值的hash值可能与老的值hash一样,于是布隆过滤器就认为,这个值是黑名单里的了,会造成误杀的结果。相当于就是宁愿杀错一k,不愿放过一个。

4.改进:通常误杀的话,可以通过两个方法去补救,再建立一个白名单,从布隆器本身去优化,降低误杀率。

5.再举例,头条给你推荐内容的时候,肯定要去查询一个的你的历史阅读记录,你看过的内容,一定是存在你的记录中的,新内容会有很小的机率认为是你之前看过的。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Redis布隆过滤器(Redis Bloom Filter)是一种基于概率数据结构的空间效率高、查询效率快的数据过滤器。它主要用于判断一个元素是否存在于一个大型集合中,具有低内存消耗和快速查询的特点。 布隆过滤器原理是利用多个哈希函数和一个位数组来表示集合中的元素。当一个元素被加入到布隆过滤器中时,会通过多个哈希函数计算出多个哈希值,并将对应的位数组位置设为1。当需要判断一个元素是否存在时,同样通过多个哈希函数计算出多个哈希值,并检查对应的位数组位置是否都为1。如果有任何一个位置为0,则可以确定该元素不存在于集合中;如果所有位置都为1,则可能存在于集合中,但并不确定。 Redis布隆过滤器通过提供以下几个命令来实现: 1. BF.ADD:将一个元素添加到布隆过滤器中。 2. BF.EXISTS:判断一个元素是否存在于布隆过滤器中。 3. BF.MADD:批量添加多个元素到布隆过滤器中。 4. BF.MEXISTS:批量判断多个元素是否存在于布隆过滤器中。 需要注意的是,布隆过滤器在判断元素存在时可能会出现误判,即判断元素存在但实际上不存在。这是因为布隆过滤器的位数组中可能存在碰撞,多个元素计算得到的位数组位置可能相同。因此,在使用布隆过滤器时需要权衡误判率和内存消耗之间的关系,并根据具体场景进行调整。 Redis布隆过滤器可以应用于一些需要快速判断元素是否存在的场景,例如缓存穿透的防护、URL去重、爬虫过滤等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wending-Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值