1. WXISME
2. 引入依赖
<dependency>
<groupId>com.github.wxisme</groupId>
<artifactId>bloomfilter</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<artifactId>jedis</artifactId>
<groupId>redis.clients</groupId>
</exclusion>
</exclusions>
</dependency>
3. 实现代码
这里的 Redis Cluster 配置请参考:使用 Jedis 连接 Redis Cluster 集群
import com.github.wxisme.bloomfilter.bitset.RedisBitSet;
import com.github.wxisme.bloomfilter.common.BloomFilter;
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Client;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
import redis.clients.util.JedisClusterCRC16;
import java.util.*;
/**
* Redis Cluster 工具类
*
* @author wangbo
* @date 2021/6/29
*/
@Slf4j
public class RedisClusterUtil {
private RedisClusterUtil() {
}
/**
* 向布隆过滤器中添加目标值
*
* @param key 布隆过滤器的key值
* @param value 要添加到布隆过滤器中的值
* @param falsePositiveProbability 期望的假阳性概率
* @param expectedNumberOfElements 布隆过滤器中元素的预期数量
*/
public static void addBloomValue(String key, String value, double falsePositiveProbability, int expectedNumberOfElements) {
try {
JedisCluster jedisCluster = JedisClusterManager.getJedis();
BloomFilter<String> filter = new BloomFilter<>(falsePositiveProbability, expectedNumberOfElements);
filter.bind(new RedisBitSet(jedisCluster, key));
filter.add(value);
} catch (Exception e) {
log.error("redis cluster add bloom value error", e);
}
}
/**
* 判断布隆过滤器中是否存在目标值
*
* @param key 布隆过滤器的key值
* @param value 目标值
* @param falsePositiveProbability 期望的假阳性概率
* @param expectedNumberOfElements 布隆过滤器中元素的预期数量
* @return 判断结果,true存在,false不存在
*/
public static boolean containsBloomValue(String key, String value, double falsePositiveProbability, int expectedNumberOfElements) {
try {
JedisCluster jedisCluster = JedisClusterManager.getJedis();
BloomFilter<String> filter = new BloomFilter<>(falsePositiveProbability, expectedNumberOfElements);
filter.bind(new RedisBitSet(jedisCluster, key));
return filter.contains(value);
} catch (Exception e) {
log.error("redis cluster contains bloom value error", e);
return false;
}
}
}