說一個很常見的場景吧,我們在新聞網(wǎng)站、視頻網(wǎng)站瀏覽新聞視頻的時候,它們是怎么給我們推薦那些我們沒看過的內容的呢?
可能你會想到:服務器端儲存每個用戶的觀看記錄,在去除掉每個用戶已觀看的內容,但是這種方法會給服務器端很大的壓力,當用戶量特別大的時候,每個人看過的內容又很多的時候,效率會大大降低,甚至拖垮服務。
如果每個用戶的觀看內容是存到了關系型數(shù)據(jù)庫,那每次查詢的時候都要順便判斷是否有重復觀看的數(shù)據(jù),說實話,關系型數(shù)據(jù)庫不適合這種場景。
再假如,把觀看數(shù)據(jù)存到了緩存中,但是這些數(shù)據(jù)是不會消失的,會隨著時間的推移而變得越來越多,時間長了緩存也一樣撐不住。
這個時候就需要專業(yè)的工具去解決這種場景,我們的布隆過濾器就可以登場了!
接下來我們來詳細看一下這個布隆過濾器到底是個什么東西。
布隆過濾器是什么?
我們知道在Redis中Set結構是可以用來判斷集合中是否存在某一個value的,簡單的理解,布隆過濾器就是一個不怎么精確的Set結構,但是有時候他又不是那么不精確,我們可以通過參數(shù)的設置,讓他變得足夠精確。
當布隆過濾器說一個值存在時,這個值有可能不存在;但是當它說一個值不存在時,那這個值確實不存在。
我們再來看上面我說的那個場景,是不是就可以用布隆過濾器過濾掉那些已經(jīng)觀看過的內容了呢,雖然可能有誤判,但是也在合理接受的范圍內。
布隆過濾器怎么使用?
布隆過濾器的指令其實非常少,只有添加和判斷是否存在兩個,bf.add和bf.exists。
其中bf.add用來添加元素,bf.exists用來判斷元素是否存在,用法和Set結構的sadd
和sismember差不多。這兩個命令一次只能操作一個元素,當然還有批量操作的指令bf.madd和bf.mexists。
本來下面該是命令的演示了,但是時間不太充足了,今天先到這,我們明天繼續(xù)!謝謝大家觀看!