布隆过滤器是一种几率数据结构,用于有效测试集合中是否存在元素。 使用Bloom筛选器能够帮助减小键/值对的昂贵磁盘查找次数。java
使用Java编程语言,开发人员能够使用各类预先构建的Bloom过滤器数据结构,包括Google的Guava核心Java库中的“ BloomFilter类”。redis
Redis是一种开源的内存中数据结构存储,可用于实现NoSQL数据库。 可是,Java与开箱即用的Redis不兼容。数据库
Java开发人员必须使用Redis Java客户端才能访问功能,例如Bloom过滤器。 在本文中,咱们将讨论如何经过Redis Java客户端Redisson在Java和Redis中使用Bloom过滤器。编程
Redisson是Redis的超快速,轻量级Java客户端,提供许多常见的Java对象和功能,包括Bloom过滤器。数据结构
如下示例代码演示了如何经过RBloomFilter接口在Redisson中使用Bloom过滤器:架构
Java编程语言
1 RBloomFilter<SomeObject> bloomFilter = redisson.getBloomFilter("sample"); 2 3 // initialize Bloom filter with 4 5 // expectedInsertions = 55000000 6 7 // falseProbability = 0.03 8 9 bloomFilter.tryInit(55000000L, 0.03); 10 11 bloomFilter.add(new SomeObject("field1Value", "field2Value")); 12 13 bloomFilter.add(new SomeObject("field5Value", "field8Value")); 14 15 bloomFilter.contains(new SomeObject("field1Value", "field8Value")); 16 17 bloomFilter.count();
布隆过滤器是一种几率数据结构:它们能够明确地指出元素不存在于集合中,而只能说元素可能存在于集合中。 falseProbability参数控制给定的RBloomFilter出现假阳性的可能性。分布式
expectedInsertions参数定义每一个元素的预期插入次数。 RBloomFilter对象最多可包含2 ^ 32位。学习
Redisson还经过RClusteredBloomFilter接口在Redis中支持分布式Bloom过滤器。 RClusteredBloomFilter的内存效率更高,可缩小全部Redis节点上使用的内存。 RClusteredBloomFilter对象最多可包含2 ^ 64位。 请注意,RClusteredBloomFilter仅在Redisson的集群模式下可用。测试
如下示例代码演示了如何使用RClusteredBloomFilter接口:
Java
1 RClusteredBloomFilter<SomeObject> bloomFilter = redisson.getClusteredBloomFilter("sample"); 2 3 // initialize Bloom filter with 4 5 // expectedInsertions = 255000000 6 7 // falseProbability = 0.03 8 9 10 bloomFilter.tryInit(255000000L, 0.03) 11 12 13 bloomFilter.add(new SomeObject("field1Value", "field2Value")); 14 15 16 bloomFilter.add(new SomeObject("field5Value", "field8Value")); 17 18 19 bloomFilter.contains(new SomeObject("field1Value", "field8Value"));
文章写道这里,若有 不足之处,欢迎补充评论。
关注我,和你一块儿细说架构那些事。优锐课