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

496

被折叠的 条评论
为什么被折叠?



