redis redisson 布隆过滤器
作用:在缓存层前添加布隆过滤器,常用于高并发场景下应对缓存穿透问题
********************
相关接口
RBloomFilter
public interface RBloomFilter<T> extends RExpirable {
boolean tryInit(long var1, double var3); //初始化布隆过滤器,var1表示大小,var3表示容错率
boolean add(T var1); //添加对象
boolean contains(T var1); //判断对象是否存在
long getExpectedInsertions(); //返回预计插入数量
double getFalseProbability(); //返回容错率
int getHashIterations(); //返回hash函数个数
long count(); //对象插入后,估计插入数量
long getSize(); //布隆过滤器位数组的大小
}
说明:开源版本不支持集群布隆过滤器
********************
示例
public class MyTest12 {
public static void main(String[] args){
Config config=new Config();
config.useSingleServer().setAddress("redis:/***:6379").setPassword("123456");
RedissonClient client= Redisson.create(config);
RBloomFilter<String> bloomFilter=client.getBloomFilter("bloom-filter");
bloomFilter.tryInit(1000,0.03);
for (int i=0;i<1000;i++){
bloomFilter.add("瓜田李下 "+i);
}
System.out.println("'瓜田李下 1'是否存在:"+bloomFilter.contains("瓜田李下 "+1));
System.out.println("'海贼王'是否存在:"+bloomFilter.contains("海贼王"));
System.out.println("预计插入数量:"+bloomFilter.getExpectedInsertions());
System.out.println("容错率:"+bloomFilter.getFalseProbability());
System.out.println("hash函数的个数:"+bloomFilter.getHashIterations());
System.out.println("插入对象的个数:"+bloomFilter.count());
}
}
************
控制台输出
'瓜田李下 1'是否存在:true
'海贼王'是否存在:false
预计插入数量:1000
容错率:0.03
hash函数的个数:5
插入对象的个数:1007
说明:count()计算的插入对象的个数是个估算值