布隆过滤器

 现学现卖。很不全的介绍。文末参考其他的博客

 

布隆过滤器的之前

   hashmap

       hashmap在查询中非常快,平均近似O(1),但现在的数据很大,远远超过内存的大小。所以数据都保存在hashmap中不现实。

     缓存穿透

           一般公司的架构是,客户端发送请求,服务端会从缓存redis等服务器中查找,如果没有在从mysql中查找,如果查找到了在缓存到redis,如果客户端发送大量不错在的请求,那么在缓存中,mysql中都不能查询到,那么msql有可能接受不了这么大的并发,而出现 死机。布隆过滤可以有效的解决这个问题。

 

布隆过滤器原理

     布隆过滤器是定义一个很长的二进制向量,长度位n,每位 初始都是零。如下(盗用别人的图)

    

     新增: 假设我们定义三个hash 函数,如果先对请求key,分别用三个hash函数求key的哈希值在对n取余,得到的值定位向量的下标,且把这个bit位设置为1.

     查找: 请求查询中,通过三个hash函数求请求key的哈希值,并对n取余,计算二进制向量下标位的值,如果都是1,那么可能请求已经存在。

               如果有一个不为1,那么这个请求必定不存在。那么这样就不用去redis缓存和mysql数据库中查询了。

                当都是1时,为什么请求可能存在呢? 因为这三个位可能被其他请求key的哈希值占据了位置。不能保证这个一定存在。也可能是出现hash冲突。就是两个不同的key,通过三个hash函数得到的哈希值都一样。貌似这个几率很小。或者hash函数取得不对

    删除: 对于删除,布隆过滤器就无能为力了,删除的请求key的哈希值,占据的三个bit位可能其他存在的请求key也占据了其中一个或多个位,如果你把bit位的1改为0,导致删除了其他的请求key。所以删除是不可行。

 

水平有限,研究的不多,就介绍的这么多。可以参考其他博客。

 

布隆过滤器的介绍,在java和redis中的使用 :https://www.cnblogs.com/CodeBear/p/10911177.html

布隆过滤器原理:https://www.jianshu.com/p/2104d11ee0a2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值