王尘宇王尘宇

研究百度干SEO做推广变成一个被互联网搞的人

布隆过滤器的原理及应用场景


布隆过滤器底层

3. 应用场景

布隆过滤器适用于大数据量,但又能允许一定程度的误差,这样的场景。例如:

  • 爬虫url判断重复
    将要爬一个url时,用布隆过滤器判断是否存在,不存在则放入,存在则不处理。误判就是此url没爬过,但布隆过滤器说爬过了,那么爬虫过程中会缺失一些url,这个不影响。

  • 缓存穿透
    通过布隆过滤器将所有数据都放入比特数组。当有请求过来,如果请求的是存在的数据,那么肯定会放行;如果是不存在的数据,可能会被挡住,小概率可能被放行。那么,大部分的恶意请求就能被挡下来。

4. 布隆过滤器的Java实现

Guava包中提供了BloomFilter的实现。

import com.google.common.base.Charsets;
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;

public class BloomFilterTest {

    public static void main(String[] args) {
        BloomFilter<CharSequence> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), 200000, 1E-7);
                
        bloomFilter.put("test");
        
        boolean contain = bloomFilter.mightContain("test");
        
        if (contain)
            System.out.println("contain test");
    }

}

相关文章

评论列表

发表评论:
验证码

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。