前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原来布隆,他还会.......

原来布隆,他还会.......

作者头像
灬沙师弟
发布2023-03-20 16:02:31
1970
发布2023-03-20 16:02:31
举报
文章被收录于专栏:Java面试教程Java面试教程

前言:

今天小面就和大家来聊一下布隆!!!他可以开盾,大招起飞!可保人可开团!!!......

不对不对 走错片场了..... 小面明明是it技术博主啊!

小面今天要讲的是布隆过滤器!!

布隆过滤器是干什么的呢?比如一般我们碰上缓存穿透问题,我们就可以用布隆过滤器去解决这个问题。

正文:

什么是布隆过滤器?

布隆过滤器,我们可以把他简单的认为就是一个固定大小的位图(bitmap)和映射函数构成。在初始状态下所有的位置都是0。我们一般是在某个需要去判断是否重复的业务场景去使用布隆过滤器。

布隆过滤器的原理

[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

假设我们初始化一个固定长度的布隆过滤器,假设一个变量进入布隆过滤器,我们将使用k个映射函数将这个变量映射进bitmap并且把0变成1. [0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0]

在查询这个变量是否存在的时候,只需要判断是否有1,如果这个变量进行函数后所有的位置都是1,那么说明该变量有可能存在 如果有0,那么该变量肯定不存在

为什么布隆过滤器说存在,那么是可能存在

如果多个变量进入了一定大小的布隆过滤器,就会存在一定概率的误判 假设:

[1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0]

此时我进入一个变量,在进行函数运算后得到的位数是1,4,6 那么4,6的位置是本来已经就是1了,无法判断究竟是哪个变量输入的,这就是导致误判的原因。

为什么布隆过滤器说不存在,那么是一定不存在

当我们用布隆过滤器进行过滤的时候,如果查询到其中一位的值为0,说明在这个布隆过滤器的bitmap中从来没有变量在函数运算后使该位置变为1,所以我们就确定该变量是肯定不存在的。

布隆过滤器的优点

我们使用布隆过滤器最常见的用处就是查看是否重复,像平常使用hashmap或者hashset是可以去实现的,但是在数据量非常庞大的时候,使用hashmap或者hashset占用的存储空间都是很大的。相反布隆过滤器占用的空间就很小,因为他是bitmap位图实现的。布隆过滤器插入查询的效率也很高。

布隆过滤器的缺点

布隆过滤器的缺点就是,有一定误判的概率。布隆过滤器不能去删除元素。我们只能去开新的bitmap去使用

对于布隆过滤器,无法删除,有两个解决办法,一个是计数布隆过滤器,另一个就是布谷鸟过滤器,在文末做补充。

布隆过滤器的使用场景

redis缓存穿透问题:大量查询不存在数据库的数据,用布隆过滤器就可以直接屏蔽这些查询,避免并发打进数据库 黑白名单校验 判断用户是否有某些浏览记录等等

拓展:计数布隆过滤器

为了解决布隆过滤器无法删除的问题,就出现了一个计数布隆过滤器或者叫做增强版布隆过滤器,这个过滤器简单来说就是 原来的布隆过滤器采用bitmap,而计数过滤器使用的是数组。当变量进入布隆过滤器经过函数运算那么就+1,当删除时就-1,无法删除的问题这样子可以去解决,但是这个计数过滤器仍然也还是有误判的概率

拓展:布谷鸟过滤器

布谷鸟过滤器的原理简单来说就是,一个变量进行函数运算,算出两个位置,如果有空位则插入,如果没有空位就会挤走一个指纹,并且为这个指纹重新去寻找新的位置(当然不会去无限寻找的情况,一般会设置一个阈值,超过阈值就会去扩容) 布谷鸟过滤器是可以进行删除的。之后我将新开一篇文章给大家详细讲一下布谷鸟过滤器的原理。

总结

布隆.....过滤器~ 你懂了吗~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java面试教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 正文:
    • 什么是布隆过滤器?
      • 布隆过滤器的原理
        • 为什么布隆过滤器说存在,那么是可能存在
          • 为什么布隆过滤器说不存在,那么是一定不存在
            • 布隆过滤器的优点
              • 布隆过滤器的缺点
                • 布隆过滤器的使用场景
                  • 拓展:计数布隆过滤器
                    • 拓展:布谷鸟过滤器
                    • 总结
                    相关产品与服务
                    云数据库 Redis
                    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档