www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]日常開發(fā)中,大家經(jīng)常使用緩存,但是你知道大型的互聯(lián)網(wǎng)公司面對高并發(fā)流量,要注意緩存穿透問題嗎!!!???本文會介紹布隆過濾器,空間換時(shí)間,以較低的內(nèi)存空間、高效解決這個(gè)問題。本篇文章的目錄:1、性能不夠,緩存來湊現(xiàn)在的年輕人都喜歡網(wǎng)購,沒事就逛逛淘寶,剁剁手,買些自己喜歡的東西,...


日常開發(fā)中,大家經(jīng)常使用緩存,但是你知道大型的互聯(lián)網(wǎng)公司面對高并發(fā)流量,要注意緩存穿透問題嗎!!!? ??文會介紹布隆過濾器,空間換時(shí)間,以較低的內(nèi)存空間、高效解決這個(gè)問題。

本篇文章的目錄:


什么是布隆過濾器?如何解決高并發(fā)緩存穿透問題?



1、性能不夠,緩存來湊

現(xiàn)在的年輕人都喜歡網(wǎng)購,沒事就逛逛淘寶,剁剁手,買些自己喜歡的東西,釋放下工作壓力。


什么是布隆過濾器?如何解決高并發(fā)緩存穿透問題?


地址:

https://detail.tmall.com/item.htm?id=628993216729

上圖是一個(gè)天貓 iphone12 的商品詳情頁,id表示商品的編號

我們都知道淘寶的訪問量是非常高的,為了提升系統(tǒng)的吞吐量,做了很多性能優(yōu)化,其中非常重要一點(diǎn)是將信息異構(gòu)到緩存中。

有句話說的好:性能不夠,緩存來湊。

但是,使用緩存時(shí),我們要關(guān)注一個(gè)重要問題,如果緩存沒有命中怎么辦?

什么是布隆過濾器?如何解決高并發(fā)緩存穿透問題?


2、緩存沒有命中,怎么辦?

什么是布隆過濾器?如何解決高并發(fā)緩存穿透問題?

  • ①我們先查詢緩存,判斷緩存中是否有數(shù)據(jù)
  • ②如果有數(shù)據(jù),直接返回
  • ③如果緩存為空,我們需要再查一次數(shù)據(jù)庫,并將數(shù)據(jù)格式異構(gòu)化,然后預(yù)熱到緩沖中,然后將結(jié)果返回
注意:

步驟 ③ 存在風(fēng)險(xiǎn)漏洞,如果緩存中數(shù)據(jù)不存在,壓力會轉(zhuǎn)嫁給數(shù)據(jù)庫。假如被競爭對手利用,搞無效請求流量攻擊,瞬間大量請求打到數(shù)據(jù)庫中,對系統(tǒng)性能產(chǎn)生很大影響,很容易把數(shù)據(jù)庫打掛,這種現(xiàn)象稱為緩存穿透。


3、那么如何處理緩存穿透?

我們的思路是,緩存中能不能判斷這個(gè)數(shù)據(jù)庫值的存在性,如果真的不存在,直接返回,也避免一次數(shù)據(jù)庫查詢。

由于不存在是個(gè)無限邊界,所以,我們采用反向策略,將存在的值建立一個(gè)高效的檢索。每次緩存取值時(shí),先走一次判空檢索。

簡單歸納下,這個(gè)框架的要求:

  • 快速檢索
  • 內(nèi)存空間要非常小
經(jīng)調(diào)研,我們發(fā)現(xiàn)布隆過濾器具備以上兩個(gè)條件。


4、什么是布隆過濾器?

布隆過濾器(Bloom Filter)是1970年由布隆提出的。它實(shí)際上是一個(gè)很長的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。布隆過濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中。

  • 優(yōu)點(diǎn):空間效率和查詢時(shí)間都遠(yuǎn)遠(yuǎn)超過一般的算法。
  • 缺點(diǎn):有一定的誤識別率,刪除困難。

5、布隆過濾器如何構(gòu)建?

布隆過濾器本質(zhì)上是一個(gè) n 位的二進(jìn)制數(shù)組,用0和1表示。

假如我們以商品為例,有三件商品,商品編碼分別為,id1、id2、id3

a)首先,對id1,進(jìn)行三次哈希,并確定其在二進(jìn)制數(shù)組中的位置。

什么是布隆過濾器?如何解決高并發(fā)緩存穿透問題?


三次哈希,對應(yīng)的二進(jìn)制數(shù)組下標(biāo)分別是 2、5、8,將原始數(shù)據(jù)從 0 變?yōu)?1。

b)對id2,進(jìn)行三次哈希,并確定其在二進(jìn)制數(shù)組中的位置。

什么是布隆過濾器?如何解決高并發(fā)緩存穿透問題?

三次哈希,對應(yīng)的二進(jìn)制數(shù)組下標(biāo)分別是 2、7、98,將原始數(shù)據(jù)從 0 變?yōu)?1。

下標(biāo) 2,之前已經(jīng)被操作設(shè)置成 1,則本次認(rèn)為是哈希沖突,不需要改動(dòng)。

Hash 規(guī)則:如果在 Hash 后,原始位它是 0 的話,將其從 0 變?yōu)?1;如果本身這一位就是 1 的話,則保持不變。


6、布隆過濾器如何使用?


什么是布隆過濾器?如何解決高并發(fā)緩存穿透問題?


跟初始化的過程有點(diǎn)類似,當(dāng)查詢一件商品的緩存信息時(shí),我們首先要判斷這件商品是否存在。

  • 通過三個(gè)哈希函數(shù)對商品id計(jì)算哈希值
  • 然后,在布隆數(shù)組中查找訪問對應(yīng)的位值,0或1
  • 判斷,三個(gè)值中,只要有一個(gè)不是1,那么我們認(rèn)為數(shù)據(jù)是不存在的。
注意:布隆過濾器只能精確判斷數(shù)據(jù)不存在情況,對于存在我們只能說是可能,因?yàn)榇嬖贖ash沖突情況,當(dāng)然這個(gè)概率非常低。


7、如何減少布隆過濾器的誤判?

a)增加二進(jìn)制位數(shù)組的長度。這樣經(jīng)過hash后數(shù)據(jù)會更加的離散化,出現(xiàn)沖突的概率會大大降低

b)增加Hash的次數(shù),變相的增加數(shù)據(jù)特征,特征越多,沖突的概率越小


8、布隆過濾器會不會很費(fèi)內(nèi)存?

帶著疑問,我們來做個(gè)實(shí)驗(yàn)

假設(shè)有1千萬個(gè)數(shù)據(jù),我們需要記錄其是否存在。存在的話標(biāo)記1,不存在標(biāo)記為0。技術(shù)選型,框架采用Redis的BitMap存儲。

數(shù)據(jù)初始化預(yù)熱代碼:

redisTemplate.executePipelined(new?RedisCallback()?{
????@Nullable
????@Override
????public?Long?doInRedis(RedisConnection?connection)?throws?DataAccessException?{
????????connection.openPipeline();
????????for?(int?offset?=?10000000;?offset?>=?0;?offset--)?{
????????????boolean?value?=?offset?%?2?==?0???true?:?false;
????????????connection.setBit("bloom-filter-data-1".getBytes(),?offset,?value);
????????}
????????connection.closePipeline();
????????return?null;
????}
});
System.out.println("數(shù)據(jù)預(yù)熱完成");
性能有點(diǎn)慢,我們也可以采用分組形式,10000個(gè)數(shù)一組,多批次提交。


什么是布隆過濾器?如何解決高并發(fā)緩存穿透問題?


數(shù)據(jù)上傳完了后,大小 1.19M,跟我們設(shè)想的一樣。

計(jì)算公式: 10000000/8/1024/1024=1.19M


9、Java應(yīng)用中,如何使用布隆過濾器?代碼實(shí)例

Java語言的生態(tài)非常繁榮,提供了很多開箱即用的開源框架供我們使用。布隆過濾器也不例外,Java 中提供了一個(gè) Redisson 的組件,它內(nèi)置了布隆過濾器。


首先引入依賴包


????org.redisson
????redisson
????3.11.1

代碼示例:

/**
?*?@author 微信公眾號:微觀技術(shù)
?*/
@Test
public?void?test5()?{
????Config?config?=?new?Config();
????config.useSingleServer().setAddress("redis://172.16.67.37:6379");
????RedissonClient?cient?=?Redisson.create(config);
????RBloomFilter?bloomFilter?=?cient.getBloomFilter("test5-bloom-filter");
????//?初始化布隆過濾器,數(shù)組長度100W,誤判率?1%
????bloomFilter.tryInit(1000000L,?0.01);
????//?添加數(shù)據(jù)
????bloomFilter.add("Tom哥");
????//?判斷是否存在
????System.out.println(bloomFilter.contains("微觀技術(shù)"));
????System.out.println(bloomFilter.contains("Tom哥"));
}
運(yùn)行結(jié)果:

false???//?肯定不存在
true????//?可能存在,有1%的誤判率
注意:誤判率設(shè)置過小,會產(chǎn)生更多次的 Hash 操作,降低系統(tǒng)的性能。通常我們的建議值是 1%


10、布隆過濾器二進(jìn)制數(shù)組,如何處理刪除?

初始化后的布隆過濾器,可以直接拿來使用了。但是如果原始數(shù)據(jù)刪除了怎么辦?布隆過濾器二進(jìn)制數(shù)組如何維護(hù)?

直接刪除不行嗎?

還真不行!因?yàn)檫@里面有Hash沖突的可能,會導(dǎo)致誤刪。

怎么辦?

方案1:開發(fā)定時(shí)任務(wù),每隔幾個(gè)小時(shí),自動(dòng)創(chuàng)建一個(gè)新的布隆過濾器數(shù)組,替換老的,有點(diǎn)CopyOnWriteArrayList的味道

方案2:布隆過濾器增加一個(gè)等長的數(shù)組,存儲計(jì)數(shù)器,主要解決沖突問題,每次刪除時(shí)對應(yīng)的計(jì)數(shù)器減一,如果結(jié)果為0,更新主數(shù)組的二進(jìn)制值為0


11、布隆過濾器的應(yīng)用場景

  • 本文重點(diǎn)介紹的,解決緩存穿透
  • 網(wǎng)頁爬蟲對URL的去重,避免爬取相同的URL地址
  • 反垃圾郵件,從數(shù)十億個(gè)垃圾郵件列表中判斷某郵箱是否垃圾郵箱

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉