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就行
}
}