6.8. 布隆过滤器(Bloom Filter)

Redisson利用Redis实现了Java分布式布隆过滤器(Bloom Filter)。所含最大比特数量为2^32

  1. RBloomFilter<SomeObject> bloomFilter = redisson.getBloomFilter("sample");
  2. // 初始化布隆过滤器,预计统计元素数量为55000000,期望误差率为0.03
  3. bloomFilter.tryInit(55000000L, 0.03);
  4. bloomFilter.add(new SomeObject("field1Value", "field2Value"));
  5. bloomFilter.add(new SomeObject("field5Value", "field8Value"));
  6. bloomFilter.contains(new SomeObject("field1Value", "field8Value"));

6.8.1. 布隆过滤器数据分片(Sharding)

基于Redis的Redisson集群分布式布隆过滤器通过RClusteredBloomFilter接口,为集群状态下的Redis环境提供了布隆过滤器数据分片的功能。通过优化后更加有效的算法,通过压缩未使用的比特位来释放集群内存空间。每个对象的状态都将被分布在整个集群中。所含最大比特数量为2^64。在这里可以获取更多的内部信息。

  1. RClusteredBloomFilter<SomeObject> bloomFilter = redisson.getClusteredBloomFilter("sample");
  2. // 采用以下参数创建布隆过滤器
  3. // expectedInsertions = 255000000
  4. // falseProbability = 0.03
  5. bloomFilter.tryInit(255000000L, 0.03);
  6. bloomFilter.add(new SomeObject("field1Value", "field2Value"));
  7. bloomFilter.add(new SomeObject("field5Value", "field8Value"));
  8. bloomFilter.contains(new SomeObject("field1Value", "field8Value"));

该功能仅限于Redisson PRO版本。