漫画:什么是布隆过滤器
来源:架构师进化论
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
</dependency>
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
public class BloomFilterTest {
public static void main(String[] args) {
int total = 100000; //总数量
BloomFilter<Integer> bf = BloomFilter.create(Funnels.integerFunnel(), total);
// 初始化数据到布隆过滤器中
for (int i = 0; i < total; i++) {
bf.put(i);
}
// 判断值是否存在过滤器中
int count = 0;
for (int i = total; i < total + 10000; i++) {
if (bf.mightContain(i)) {
count++;
}
}
System.out.println("误判的数量 ~ " + count);
}
}
public static <T> BloomFilter<T> create(Funnel<? super T> funnel, long expectedInsertions) {
return create(funnel, expectedInsertions, 0.03D);
}
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
public class BloomFilterTest {
public static void main(String[] args) {
int total = 100000; //总数量
BloomFilter<Integer> bf = BloomFilter.create(Funnels.integerFunnel(), total, 0.01);
// 初始化数据到布隆过滤器中
for (int i = 0; i < total; i++) {
bf.put(i);
}
// 判断值是否存在过滤器中
int count = 0;
for (int i = total; i < total + 10000; i++) {
if (bf.mightContain(i)) {
count++;
}
}
System.out.println("误判的数量 ~ " + count);
}
}
-
1. 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱 -
2. 爬虫过滤已抓到的url就不再抓,可用bloom filter过滤
-
3. Google Chrome 使用布隆过滤器识别恶意 URL -
4. 使用布隆过滤器避免推荐给用户已经读过的文章/视频
本号读者福利
我把自己的原创精华文章整理成了一本电子书,共 630页,无论你是要面试,还是提升自己的修为,我想它都一定能帮助你,否则找我要红包!目录如下
推荐阅读