高清世界街景地圖如何退訂夫唯seo教程
目錄
1、布隆過濾器是什么
2、布隆過濾器的優(yōu)缺點
3、使用場景
4、?基于Redis的布隆過濾器插件安裝
4.1 下載布隆過濾器
4.2?創(chuàng)建文件夾并上傳文件
4.3 安裝gcc
4.4 解壓RedisBloom壓縮包
4.5 在解壓好的文件夾下輸入make
4.6?將編譯的好的插件拷貝到docker redis容器中
4.7 修改配置文件,并重啟Redis
4.8 查看操作日志
4.9 進(jìn)入redis客戶端查看,測試
4.10 常用命令:
小結(jié)
1、布隆過濾器是什么
布隆過濾器(Bloom Filter)是一種空間效率非常高的隨機(jī)數(shù)據(jù)結(jié)構(gòu),用于判斷一個元素是否在一個集合中。與傳統(tǒng)的哈希表或者二叉搜索樹等數(shù)據(jù)結(jié)構(gòu)不同,布隆過濾器可以在空間和時間上做出很多妥協(xié),從而實現(xiàn)高效的查詢和插入操作。
布隆過濾器的核心思想是使用多個哈希函數(shù)來將元素映射到位數(shù)組中的多個位置上。當(dāng)一個元素被加入到布隆過濾器中時,它會被多次哈希,并將對應(yīng)的位數(shù)組位置設(shè)置為1。當(dāng)需要判斷一個元素是否在布隆過濾器中時,我們只需將該元素進(jìn)行多次哈希,并檢查對應(yīng)的位數(shù)組位置是否都為1,如果其中有任意一位為0,則說明該元素不在集合中;如果所有位都為1,則說明該元素可能在集合中(因為有可能存在哈希沖突),需要進(jìn)一步檢查。
示例圖:
圖片來源:https://baijiahao.baidu.com/s?id=1760676476679974031&wfr=spider&for=pc
2、布隆過濾器的優(yōu)缺點
布隆過濾器是一種概率型數(shù)據(jù)結(jié)構(gòu),用于快速判斷一個元素是否存在于一個集合中。它具有以下優(yōu)點和缺點:
優(yōu)點:
- 高效的查詢速度:布隆過濾器的查詢時間復(fù)雜度是O(1),即使在大規(guī)模數(shù)據(jù)集中也能快速判斷一個元素是否存在。
- 空間效率高:相比于其他數(shù)據(jù)結(jié)構(gòu),布隆過濾器所需的空間通常較小。它利用位數(shù)組和哈希函數(shù)來表示元素的存在狀態(tài),因此占用的內(nèi)存相對較少。
- 支持高并發(fā)場景:由于布隆過濾器的查詢操作是無鎖的,并且不需要訪問磁盤或網(wǎng)絡(luò),因此適用于高并發(fā)的場景。
缺點:
- 可能出現(xiàn)誤判:布隆過濾器存在一定的誤判率,即可能將不存在的元素誤判為存在。這是由于哈希函數(shù)的沖突和位數(shù)組的碰撞造成的。誤判率隨著數(shù)據(jù)量的增加而增加,可以通過調(diào)整哈希函數(shù)個數(shù)和位數(shù)組大小來降低誤判率,但不能完全消除。
- 不支持刪除操作:布隆過濾器設(shè)計初衷是用于判斷元素是否存在,而不支持刪除操作。一旦一個元素被添加到布隆過濾器中,就無法從布隆過濾器中刪除。如果需要刪除元素,需要使用其他數(shù)據(jù)結(jié)構(gòu)輔助操作。
- 對內(nèi)存敏感:布隆過濾器對內(nèi)存的使用非常敏感。為了降低誤判率,需要增加位數(shù)組的大小和哈希函數(shù)的個數(shù),這會增加內(nèi)存的消耗。在內(nèi)存資源有限的情況下,需要權(quán)衡空間和誤判率。
綜上所述,布隆過濾器適用于對查詢速度要求高、對誤判率可以容忍的場景,但需要注意其不支持刪除操作和對內(nèi)存敏感的特點。在實際應(yīng)用中,需要根據(jù)具體需求和數(shù)據(jù)規(guī)模來選擇是否使用布隆過濾器。
3、使用場景
常見的使用場景包括:
-
網(wǎng)頁黑名單過濾:將惡意網(wǎng)站的 URL 存儲到布隆過濾器中,當(dāng)用戶訪問時,可以快速判斷該網(wǎng)站是否為惡意網(wǎng)站,從而進(jìn)行攔截或提示。
-
垃圾郵件過濾:將已知的垃圾郵件的特征(如發(fā)件人、主題、內(nèi)容等)存儲到布隆過濾器中,當(dāng)新郵件到來時,可以快速判斷是否為垃圾郵件,從而進(jìn)行過濾。
-
?緩存穿透問題解決:當(dāng)緩存中不存在某個鍵值對時,可以先通過布隆過濾器判斷該鍵是否存在,如果不存在,則直接返回空值,避免了對數(shù)據(jù)庫等后端存儲的不必要查詢,從而提高了系統(tǒng)的性能。?
圖片來源:Redis6-雪崩、擊穿、穿透、分布式鎖 - 知乎
圖片來源:什么是布隆過濾器? - 知乎
需要注意的是,布隆過濾器的誤判率是無法避免的,因此在使用時需要根據(jù)具體場景進(jìn)行權(quán)衡和調(diào)整。
4、?基于Redis的布隆過濾器插件安裝
4.1 下載布隆過濾器
首先需要安裝完成Redis(安裝過程略),然后布隆過濾器便可以作為一個插件加載到Redis服務(wù)器直接使用。
Linux版本:https://github.com/RedisBloom/RedisBloom/archive/v2.2.4.tar.gz
4.2?創(chuàng)建文件夾并上傳文件
4.3 安裝gcc
4.4 解壓RedisBloom壓縮包
4.5 在解壓好的文件夾下輸入make
4.6?將編譯的好的插件拷貝到docker redis容器中
4.7 修改配置文件,并重啟Redis
43 # loadmodule /path/to/my_module.so
44 # loadmodule /path/to/other_module.so
45
46 loadmodule /usr/local/etc/redis/redisbloom.so
4.8 查看操作日志
4.9 進(jìn)入redis客戶端查看,測試
4.10 常用命令:
- bf.add:添加元素
- bf.madd:批量添加元素
- bf.exists:檢索元素是否存在
- bf.mexists:檢索多個元素是否存在
- bf.reserve:自定義布隆過濾器,設(shè)置key,error_rate和initial_size
小結(jié)
由于布隆過濾器不需要存儲元素本身,而只需要存儲元素的哈希值,因此它的空間效率非常高。同時,由于布隆過濾器使用多個哈希函數(shù)來減少哈希沖突的概率,因此它的查詢效率也比較高。但是,布隆過濾器存在一定的誤判率,即有可能將不在集合中的元素誤判為在集合中,這是由于哈希沖突和位數(shù)組大小等因素造成的。因此,在使用布隆過濾器時,需要根據(jù)具體情況來選擇合適的哈希函數(shù)個數(shù)和位數(shù)組大小,以控制誤判率。
參考:
硬核|Redis 布隆(Bloom Filter)過濾器原理與實戰(zhàn)
布隆過濾器 Bloom Filter - 知乎
什么是布隆過濾器? - 知乎
Redis6-雪崩、擊穿、穿透、分布式鎖 - 知乎
感謝閱讀,碼字不易,多謝點贊!如有不當(dāng)之處,歡迎反饋指出,感謝!