
一、 什么是布隆過濾器作用、組成、添加元素流程、查詢元素的流程、特點誤判、不支持刪除布隆過濾器Bloom Filter是由Burton Howard Bloom于1970年提出的。我們可以把它看作由位數組和一組哈希函數組成的數據結構,它占用空間少并且效率更高但是缺點是其返回的結果是概率性的而不是非常準確的。理論情況下添加到集合中的元素越多誤報的可能性就越大。并且存放在布隆過濾器的數據不容易刪除。換句話說是一種用來檢查元素是否存在于指定集合中的數據結構這種數據結構是高效且性能很好的但缺點是具有一定的錯誤識別率和刪除難度。并且理論情況下添加到集合中的元素越多誤報的可能性就越大。組成位數組多個哈希函數組成添加元素流程首先對需要存入的元素進行不同的哈希函數運算生成不同的哈希結果然后將每一個哈希值對應到位數組的位置并且將對應的位置下標從0改成1。查詢元素的流程對于待查詢元素使用和添加元素完全相同的個數哈希函數進行計算算出若干個哈希值映射得到位數組上對應位置的下標進行比對只要有任意一個位置的值為 0說明該元素一定沒有存入布隆過濾器如果所有的值均為 1則無法確定元素一定存在只能判定元素大概率存在因為存在誤報可能性。特點1、誤判性2、不支持刪除二、布隆過濾器的優點和缺點有哪些優點1、存儲空間高效僅使用 bit 數組存儲標記不存放原始數據同等數據量下內存遠小于 List、Set、Map2、讀寫性能高插入與查詢只需要多次哈希運算效率很高3、數據本身不存儲增強安全性沒有保存原始元素無法直接從過濾器中還原數據缺點1、存在誤報問題有可能把不存在的元素判定為存在元素數量越多誤報概率越高2、難以刪除元素多個元素會共享比特位直接置 0 會影響其他元素判斷3、無法獲得實際元素三、 發送業務通知短信前要判斷手機號碼是否在黑名單1000w實現思路針對 1000 萬級別的手機號碼黑名單判斷場景使用布隆過濾器Bloom Filter來實現具體實現思路如下1、數據初始化把數據庫中的1000萬個黑名單手機號全部取出依次通過哈希函數將所有黑名單手機號都添加到布隆過濾器中。2、業務收到發送請求先用手機號查詢布隆過濾器使用相同哈希函數進行查詢如果過濾器判定不存在則手機號不在黑名單允許發送短信如果過濾器判定存在則有可能在黑名單里因為布隆過濾器存在誤判的可能所以需要進行二次查詢來確定是否真的在黑名單里。