說一個很常見的場景吧教翩,我們在新聞網(wǎng)站、視頻網(wǎng)站瀏覽新聞視頻的時候贪壳,它們是怎么給我們推薦那些我們沒看過的內(nèi)容的呢饱亿?
可能你會想到:服務(wù)器端儲存每個用戶的觀看記錄,在去除掉每個用戶已觀看的內(nèi)容闰靴,但是這種方法會給服務(wù)器端很大的壓力彪笼,當(dāng)用戶量特別大的時候,每個人看過的內(nèi)容又很多的時候蚂且,效率會大大降低配猫,甚至拖垮服務(wù)。
如果每個用戶的觀看內(nèi)容是存到了關(guān)系型數(shù)據(jù)庫杏死,那每次查詢的時候都要順便判斷是否有重復(fù)觀看的數(shù)據(jù)章姓,說實話,關(guān)系型數(shù)據(jù)庫不適合這種場景识埋。
再假如凡伊,把觀看數(shù)據(jù)存到了緩存中,但是這些數(shù)據(jù)是不會消失的窒舟,會隨著時間的推移而變得越來越多系忙,時間長了緩存也一樣撐不住。
這個時候就需要專業(yè)的工具去解決這種場景惠豺,我們的布隆過濾器就可以登場了银还!
接下來我們來詳細(xì)看一下這個布隆過濾器到底是個什么東西风宁。
布隆過濾器是什么?
我們知道在Redis中Set結(jié)構(gòu)是可以用來判斷集合中是否存在某一個value的蛹疯,簡單的理解戒财,布隆過濾器就是一個不怎么精確的Set結(jié)構(gòu),但是有時候他又不是那么不精確捺弦,我們可以通過參數(shù)的設(shè)置饮寞,讓他變得足夠精確。
當(dāng)布隆過濾器說一個值存在時列吼,這個值有可能不存在幽崩;但是當(dāng)它說一個值不存在時,那這個值確實不存在寞钥。
我們再來看上面我說的那個場景慌申,是不是就可以用布隆過濾器過濾掉那些已經(jīng)觀看過的內(nèi)容了呢,雖然可能有誤判理郑,但是也在合理接受的范圍內(nèi)蹄溉。
布隆過濾器怎么使用?
布隆過濾器的指令其實非常少您炉,只有添加和判斷是否存在兩個,bf.add
和bf.exists
柒爵。
其中bf.add
用來添加元素,bf.exists
用來判斷元素是否存在邻吭,用法和Set結(jié)構(gòu)的sadd
和sismember
差不多餐弱。這兩個命令一次只能操作一個元素,當(dāng)然還有批量操作的指令bf.madd
和bf.mexists
囱晴。
本來下面該是命令的演示了膏蚓,但是時間不太充足了,今天先到這畸写,我們明天繼續(xù)驮瞧!謝謝大家觀看!