布隆过滤器的代码演示

布隆过滤器实际上算得上是一种数据结构,一个算法的hash set ,与一般不同的是他不需要存储key的值,他是通过对数据取模在记录到相应的比特位上面去,来判断key是否存在集合中

是一种概率型的数据结构,可以用于判定一个数据是否存在,有一定的误判率,牺牲精确度换取空间和时间效率的算法
结构:二进制数组 一系列的hash
特征:
  判定一个数据存在,可能不存在
  判定一个数据不存在,就一定不存在 
  删除更新困难
因子:
  1.hash函数的个数
  2.二进制数组的长度
代码:
  1.google guava
  2.redisson
  3.redis框架

 

代码实现

  基于Redis实现分布式的布隆过滤器

@Autowired
    private RedissonClient redissonClient;

    @Test
    void fenbushiBloom(){
        RBloomFilter<Object> bf = this.redissonClient.getBloomFilter("bf"); 
        bf.tryInit(20,0.3);
        bf.add("1");
        bf.add("2");
        bf.add("4");
        bf.add("3");
        bf.add("5");
        bf.add("6");
        bf.add("7");

        System.out.println(bf.contains("1"));
        System.out.println(bf.contains("3"));
        System.out.println(bf.contains("5"));
        System.out.println(bf.contains("7"));
        System.out.println(bf.contains("8"));
        System.out.println(bf.contains("9"));
        System.out.println(bf.contains("0"));
    }

 

  基本的单机布隆过滤器

 public static void main(String[] args) {
        BloomFilter<CharSequence> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), 20, 0.3);
        bloomFilter.put("1");
        bloomFilter.put("2");
        bloomFilter.put("3");
        bloomFilter.put("4");
        bloomFilter.put("5");
        bloomFilter.put("6");
        bloomFilter.put("7");
        System.out.println(bloomFilter.mightContain("1"));
        System.out.println(bloomFilter.mightContain("3"));
        System.out.println(bloomFilter.mightContain("5"));
        System.out.println(bloomFilter.mightContain("7"));
        System.out.println(bloomFilter.mightContain("9"));
        System.out.println(bloomFilter.mightContain("12"));
        System.out.println(bloomFilter.mightContain("13"));
        System.out.println(bloomFilter.mightContain("15"));
        System.out.println(bloomFilter.mightContain("16"));
}

 

posted @ 2022-01-20 21:13  Yapi酱  阅读(238)  评论(0)    收藏  举报