Redis之布隆過濾器

定義

布隆過濾器,是指一個輔助的手段,通過一個類似於按位讀或者說是類似數組賦值的方式告訴程序,一個key一定不存在,或者是可能存在

好處

試想一下,如果去判斷某個元素是否存在,會使用什麼樣的方法,從時間複雜度的角度來講應該是會用到hashmap,但是當元素的量十分巨大,hashmap的空間複雜度也會變得十分巨大,因此,布隆過濾器這樣的按位去標記的好處就能體現出來,在一個相對佔空間較小的情形下,可以告訴程序,一個元素一定不存在,但是卻有着不確定性,因爲無法區分是否一定存在。

使用場景

  1. 爬蟲url去重,從而降低i/o請求
  2. 如需要過濾黑名單,一定不再黑名單裏,就允許鏈接,和後續操作

如何使用

舉一個簡單的例子
現用一個數字代替一個IP地址:如192(發揮想象,想象成整個ip的地址)
192 的二進制數對應着 1100 0000 (將192轉換爲二進制數可以想象成哈希函數的映射過程)
現有一個數組模擬一下布隆過濾器

1 1 0 0 0 0 0 0
0 1 2 3 4 5 6 7

將192對應的0和1號位 置一 就模擬完成了設置黑名單的功能
當下一個請求過來時,可以對將ip地址hash,生成對應的位數,和布隆過濾器(數組)中存的做比對,如果發現0、1位是1,那麼就是黑名單中的ip,那麼就不做後續的操作,直接將函數返回。
以上就是模擬了布隆過濾器的使用過程。

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