redis 布隆過濾器

2021-10-22 18:55:43 字數 760 閱讀 6722

為了應對redis快取穿透有三個大致方案:做好引數校驗,快取無效key,以及布隆過濾器。

通過布隆過濾器我們可以非常方便地判斷乙個給定資料是否存在於海量資料中。我們需要的就是判斷 key 是否合法

具體是這樣做的:把所有可能存在的請求的值都存放在布隆過濾器中,當使用者請求過來,先判斷使用者發來的請求的值是否存在於布隆過濾器中。不存在的話,直接返回請求引數錯誤資訊給客戶端,存在的話才會走下面的流程。

布隆過濾器會出現不存在的資料判斷為存在,但是布隆過濾器說不存在就一定不存在,就是多個hash值下標都對應上就存在,否則不存在。

誤判原因:

我們先來看一下,當乙個元素加入布隆過濾器中的時候,會進行哪些操作:

使用布隆過濾器中的雜湊函式對元素值進行計算,得到雜湊值(有幾個雜湊函式得到幾個雜湊值)。

根據得到的雜湊值,在位陣列中把對應下標的值置為 1。

查詢流程是:

對給定元素再次進行相同的雜湊計算;

得到值之後判斷位陣列中的每個元素是否都為 1,如果值都為 1,那麼說明這個值在布隆過濾器中,如果存在乙個值不為 1,說明該元素不在布隆過濾器中。

然後,一定會出現這樣一種情況:不同的字串可能雜湊出來的位置相同。 (可以適當增加位陣列大小或者調整我們的雜湊函式來降低概率)

Redis 布隆過濾器

實現原理 對的資料肯定是對的,錯的資料不能保證是對的。解釋如下 之前新增到容器中的資料,再次進行判斷是不是在這裡面,因為來過,槽位肯定我為1,所以判斷是不會出現問題的。容器中不存在,判斷是不是在容器中,可能其他的資料通過hash函式執行後把槽位占用了,所以存在一定的誤差。不能保證一定沒問題。hash...

Redis 布隆過濾器

想知道某乙個值是不是已經在 hyperloglog 結構裡面了,它就無能為力了,它只提供了 pfadd 和 pfcount 方法,沒有提供 pfcontains 這種方法。講個使用場景,比如我們在使用新聞客戶端看新聞時,它會給我們不停地推薦新的內容,它每次推薦時要去重,去掉那些已經看過的內容。問題來...

redis 布隆過濾器

簡述 這個過濾器可以檢索乙個元素是否在乙個集合中 優點是查詢效率很高,缺點是有一定概率出現誤判 可以理解為 利用高效的資料結構和演算法快速判斷出你這個 key 是否在資料庫中存在,不存在就 return 存在就去查詢 db資料庫 重新整理 kv 再 return。可以通過 來看下效果 先導入依賴 d...