扣丁學堂Java培訓之Bloom Filter(布隆過濾器)如何解決緩存穿透
2019-03-22 19:24:15
1812瀏覽
今天扣丁學堂Java培訓老師給大家介紹一下關(guān)于BloomFilter(布隆過濾器)如何解決緩存穿透的詳細介紹,下面我們詳細介紹一下吧。
緩存穿透是什么?
關(guān)于緩存穿透,簡單來說就是系統(tǒng)處理了大量不存在的數(shù)據(jù)查詢。正常的使用緩存流程大致是,數(shù)據(jù)查詢先進行緩存查詢,如果key不存在或者key已經(jīng)過期,再對數(shù)據(jù)庫進行查詢,并把查詢到的對象,放進緩存。如果數(shù)據(jù)庫查詢對象為空,則不放進緩存。現(xiàn)在系統(tǒng)接收了大量不存在的key,緩存層形同虛設(shè),大量請求引向數(shù)據(jù)庫,數(shù)據(jù)庫承受不了壓力,宕機。
布隆過濾器是什么?
BloomFilter適用于判斷數(shù)據(jù)是否在一個集合中。
BloomFilter的基本原理是位數(shù)組與Hash函數(shù)的聯(lián)合使用。
首先,BloomFilter是一個包含了m位的位數(shù)組,數(shù)組的每一位都初始化為;其次,定義k個不同的Hash函數(shù),每個函數(shù)都可以將集合中的元素映射到位數(shù)組的某一位。
當向集合中插入元素時,根據(jù)K個Hash函數(shù)可以得到位數(shù)組中的k個位,如果有的位為0,則元素肯定不在集合中,如果全部為1,則元素可能在集合中,因為在插入其它元素時,可能會將這些位置設(shè)為1。
所以,使用BloomFilter法的難點是如何根據(jù)輸入元素個數(shù)n,來確定位數(shù)組m的大小以及Hash函數(shù)。
BloomFilter的優(yōu)點是具有很好的空間效率和時間效率。它的插入和查詢時間都是常數(shù),另外,它不保存元素本身,具有良好的安全性。然而,這些優(yōu)點都是以犧牲正確率為代價的。當插入的元素越多,錯判的概率越大。另外,BloomFilter只能插入元素,不能刪除元素,原因是多個元素可能共用了位數(shù)組中的同一個位。
以上就是關(guān)于扣丁學堂Java培訓之Bloom Filter(布隆過濾器)如何解決緩存穿透的全部介紹,
想要了解更多關(guān)于Java開發(fā)方面內(nèi)容的小伙伴,請關(guān)注扣丁學堂Java培訓官網(wǎng)、微信等平臺,扣丁學堂IT職業(yè)在線學習教育平臺為您提供權(quán)威的Java開發(fā)環(huán)境搭建視頻,Java培訓后的前景無限,行業(yè)薪資和未來的發(fā)展會越來越好的,扣丁學堂老師精心推出的Java視頻教程定能讓你快速掌握Java從入門到精通開發(fā)實戰(zhàn)技能??鄱W堂Java技術(shù)交流群:670348138。
【關(guān)注微信公眾號獲取更多學習資料】 【掃碼進入HTML5前端開發(fā)VIP免費公開課】
查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>
標簽:
Java培訓
Java視頻教程
Java多線程
Java面試題
Java學習視頻
Java開發(fā)