• 6.8. 布隆过滤器(Bloom Filter)
    • 6.8.1. 布隆过滤器数据分片(Sharding)

    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版本。