使用布隆過濾器解決redis穿透問題

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章