布隆过滤器

1.布隆过滤器

布隆过滤器是很长一段的一段二进制,主要用于判断一个元素是否在一个集合中。

当一个对象经过过滤器的时候,会经过多个不同函数的Hash运算,算出不同的Hash值,把这些位置的二进制位置1.那么在查询的时候,就可以再次通过多次Hash运算判断对应的Hash位是不是全是1,如果不全是1证明查询的这个对象肯定不在布隆过滤器中,如果全是1 那么代表很有可能存在布隆过滤器中,但不是绝对的。

比如说对象A经过2个Hash运行得到1,3.对象B经过两个Hash运算得到2,4. 现在想要查询对象C,由多个函数计算Hash值,假设是1,4. 发现1,4 都是1 ,但是这并不代表C就存在。

布隆过滤器只能添加元素,并不能删除元素,因为你不能准确的指出这个bit是哪个对象置1的

此外布隆过滤器有误算概率,可能把一些不存在的计算为存在。

应用:

在程序的世界中,布隆过滤器是程序员的一把利器,利用它可以快速地解决项目中一些比较棘手的问题。

如网页 URL 去重、垃圾邮件识别、大集合中重复元素的判断和缓存穿透等问题。

redis中可以应用布隆过滤器防止缓存穿透。

什么是缓存穿透,我现在想要去查找一个数据,首先先看缓存,缓存中没有,再看数据库,数据库中也没有,那么就会返回一个null,这样的请求多了的时候就会给服务器带来很大的压力。我们需要一个集合(布隆过滤器)把所有缓存中查询不到,数据库中也查询不到的对象加入布隆过滤器中,如果布隆过滤器中存在就拒绝这次请求了。布隆过滤器在解决缓存穿透的时候是放在redis前面的。

问题:既然布隆过滤器存在误判,为什么还能用于解决缓存穿透,这样的话,一个合理的查询被过滤掉了怎么办?暂时还不会

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值