- 匹配不上,则一定不相等。但是匹配上,也可能不相等(不同的公司名的hash值散落到bit上一致,即hash冲突) 实际场景: 公安系统有个犯罪人员名单,比如是几千万。把他们的身份证全部放到布隆过滤器里面。 在你去过飞机、演唱会的安检时,可以根据你的身份证去布隆过滤器里面验证是否是嫌疑人。 匹配不到,那你一定不是犯罪名单。匹配到了,也别紧张,可能是误判。๑乛◡乛๑。 去小黑屋和警察叔叔喝杯茶确认下就好了。
再比如,南京有一千万家注册公司,每次新公司注册,如何防止和之前的公司是否重名呢? 把所有的公司名字放到布隆过滤器里面。 今天你去注册公司,名字叫“碧海蓝天高级洗浴中心”匹配不到,恭喜你,那就是可以用这个名字了。 匹配到了的话,就需要确认下(此时可能误报哦)或者换个名字了。
优点:内存占用少记少(hash函数-->bit位). 缺点:有一定几率的误报(具体看hash函数的实现)
-
具体使用:
1 com.google.guava 的 BloomFilter
2 redis的 rebloom
-
应用场景 主要是解决大规模数据下不需要精确过滤的场景,如检查垃圾邮件地址,爬虫URL地址去重,解决缓存穿透问题等
缓存击穿问题