1.布隆过滤器可以解决redis缓存穿透问题
2.使用布隆过滤器需要先预热key
布隆过滤器使用测试
1.添加布隆过滤器依赖
<!--引入布隆过滤器-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>22.0</version>
</dependency>
2.测试demo
//布隆过滤器测试
public class BlongTest {
//设置预热key 1000000万条
private static Integer size = 1000000;
public static void main(String[] args) {
//创建一个布隆过滤器 size期望插入值 0.01误判率
BloomFilter<Integer> integerBloomFilter = BloomFilter.create(Funnels.integerFunnel(), size, 0.00001);
for (int i = 0; i < size; i++) {
//往布隆过滤器putkey
integerBloomFilter.put(i);
}
//存放误判key的值
List<Integer> list = new ArrayList<>();
for (int i = size; i < size + 10000; i++) {
//判断布隆过滤器存在key则加入数组
if (integerBloomFilter.mightContain(i)) {
list.add(i);
}
}
System.out.println(list.size()); //98 误判数
//100万数据 误判率设置0.03(默认值) 二向数组长度值7298440 ==730万
//100万数据 误判率设置0.01 二向数组长度值9585058 ==960万
//100万数据 误判率设置0.001 二向数组长度值14377587 ==1437万
//100万数据 误判率设置0.0001 二向数组长度值19170116 ==1917万
//100万数据 误判率设置0.00001 二向数组长度值23962645 ==2396万
//使用布隆过滤器需要先预热key
//误判率减少10倍,数组长度大约增500万 ,一般默认0.03或者0.01就行
}
}