布隆過濾器是一種機率數據結構,用於有效測試集合中是否存在元素。 使用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"));
文章寫道這裏,若有 不足之處,歡迎補充評論。
關注我,和你一塊兒細說架構那些事。優銳課