springboot 實現布隆過濾器防止黑客攻擊

2021-10-10 21:54:48 字數 1274 閱讀 2648

問題:黑客拿不存在的id請求後端介面,在redis資料庫中找不到該id的資訊則會去mysql資料庫中查詢。如果黑客發起大量請求請求資料庫是會導致快取擊穿,從而使服務癱瘓。

解決辦法:使用布隆過濾器。

布隆過濾器的優點:

1.簡單好用。

2.儲存量小,幾千萬個id可能所占用的記憶體為幾兆到幾十兆,如果使用常規的資料庫來儲存的話可能需要幾百g到上t的儲存空間。

3.查詢速度快。

1.將存在的id放入布隆過濾器中。

2.在通過id查詢資料的介面中加入該id是否存在於布隆過濾器中,如果不存在則說明該id在資料庫中沒有,可不用查詢mysql資料庫。

static  bloomfilter

bloomfilter =bloomfilter.

create

(funnels.

stringfunnel

(charset.

forname

("utf-8"))

,1000

,0.001);

("/bloomfilter"

)@apioperation

("布隆過濾器"

)public responseresult bloomfilter()

return

newresponseresult

(responseenum.success)

;}

使用時只用判斷為true即可

("/bloomfilter/resourceid"

)@apioperation

("布隆過濾器資源測試"

)public responseresult bloomfilterresourceid

(@requestparam

("resourceid"

)string resourceid)

return

newresponseresult

(responseenum.success);}

說明:

list

allresourceid = rescenterdao.

getallresourceid()

;

這一步是從資料庫中獲取某張表所有的id,那麼會存在乙個問題,該錶的資料會新增,導致布隆過濾器中的id不是最新的。解決辦法就是在新增資料,將表的id及時加入到布隆器中。

大資料面試必會問題BitSet以及布隆過濾器

問題 假設你現在要處理這樣乙個問題,你有乙個 並且擁有很多訪客,每當有使用者訪問時,你想知道這個ip是不是第一次訪問你的 這是乙個很常見的場景,為了完成這個功能,你很容易就會想到下面這個解決方案 把訪客的ip存進乙個hash表中,每當有新的訪客到來時,先檢查雜湊表中是否有改訪客的ip,如果有則說明該...

go實現布隆過濾器

布隆過濾器一般用來判斷乙個資料是否在乙個很大的資料集合裡面。當然可以用陣列,集合,樹等資料結構和各種查詢法都可以做同樣的事情,但是布隆過濾器有更好的時間效率和空間效率。位元幣實現spv節點時使用了布隆過濾器來查詢交易。布隆過濾器可以判斷乙個數在不在集合裡,但存在一定的誤判率。布隆過濾器的核心是乙個超...

Bloom Filter 布隆演算法

日常生活中,包括在設計計算機軟體時,我們經常要判斷乙個元素是否在乙個集合中。比如在字處理軟體中,需要檢查乙個英語單詞是否拼寫正確 也就是要判斷它是否在已知的字典中 在 fbi,乙個嫌疑人的名字是否已經在嫌疑名單上 在網路爬蟲裡,乙個 是否被訪問過等等。最直接的方法就是將集合中全部的元素存在計算機中,...