服務(wù)器的緩存穿透及解決方案
【小編提醒】本文部分內(nèi)容源于網(wǎng)絡(luò),不代表本站觀點(diǎn)!若有了解“服務(wù)器的緩存穿透及解決方案”等有關(guān)服務(wù)器、云主機(jī)租用、托管、配置、價(jià)格問題,請(qǐng)免費(fèi)咨詢YINGSOO客服,獲取最新優(yōu)惠!
【主機(jī)上新】美國(guó)G口服務(wù)器特價(jià) | 法國(guó)云服務(wù)器特價(jià) | 臺(tái)灣200M服務(wù)器特價(jià)
【相關(guān)閱讀】購(gòu)買海外云服務(wù)器要注意什么?注意這三大誤區(qū)

1.什么是緩存穿透
緩存穿透其實(shí)是指從緩存中沒有查到數(shù)據(jù),而不得不從后端系統(tǒng)(比如數(shù)據(jù)庫(kù))中查詢的情況。
什么樣的緩存穿透對(duì)系統(tǒng)有害呢?答案是大量的穿透請(qǐng)求超過了后端系統(tǒng)的承受范圍,造成了后端系統(tǒng)的崩潰。
一個(gè)經(jīng)典場(chǎng)景:讀取一個(gè)用戶表中未注冊(cè)的用戶。
緩存的讀寫策略常采用 cache Aside 策略。按照這個(gè)策略,先讀緩存,再穿透讀數(shù)據(jù)庫(kù)。由于用戶并不存在,所以緩存和數(shù)據(jù)庫(kù)中都沒有查詢到數(shù)據(jù),因此也就不會(huì)向緩存中回種數(shù)據(jù)(也就是向緩存中設(shè)置值的意思)。
這樣當(dāng)再次請(qǐng)求這個(gè)用戶數(shù)據(jù)的時(shí)候還是會(huì)再次穿透到數(shù)據(jù)庫(kù)。在這種場(chǎng)景下,緩存并不能有效地阻擋請(qǐng)求穿透到數(shù)據(jù)庫(kù)上。
2.解決方案
有兩種:
回種空值以及使用布隆過濾器。
回種空值比較簡(jiǎn)單,但需要占用大量存儲(chǔ)空間,使用的時(shí)候應(yīng)該評(píng)估一下緩存容量是否能夠支撐。
而布隆過濾器維護(hù)了一個(gè)數(shù)組,可以用來迅速判斷一個(gè)元素是否存在,那么當(dāng)我們需要查詢某一個(gè)用戶的信息時(shí),我們首先查詢這個(gè) id 在布隆過濾器中是否存在,如果不存在就直接返回空值,而不需要繼續(xù)查詢數(shù)據(jù)庫(kù)和緩存,這樣就可以極大地減少異常查詢帶來的緩存穿透。
但布隆過濾器有兩個(gè)缺陷:
1. 它在判斷元素是否在集合中時(shí)是有一定錯(cuò)誤幾率的,比如它會(huì)把不是集合中的元素判斷為處在集合中(Hash 算法的問題)
布隆過濾器雖然存在誤判的情況,但是還是會(huì)減少緩存穿透的情況發(fā)生,只是需要盡量減少誤判的幾率,這樣判斷正確的幾率更高,對(duì)緩存的穿透也更少。一個(gè)解決方案是:
使用多個(gè) Hash 算法為元素計(jì)算出多個(gè) Hash 值,只有所有 Hash 值對(duì)應(yīng)的數(shù)組中的值都為 1 時(shí),才會(huì)認(rèn)為這個(gè)元素在集合中。
2. 不支持刪除元素。
最后,對(duì)于極熱點(diǎn)緩存數(shù)據(jù)穿透造成的“狗樁效應(yīng)”,可以通過設(shè)置分布式鎖或者后臺(tái)線程定時(shí)加載的方式來解決。
熱門節(jié)點(diǎn):香港服務(wù)器去首頁(yè)注冊(cè)有禮!YINGSOO推出PHA挖礦服務(wù)器、PHA挖礦教程、Chia奇亞服務(wù)器、Swarm物理節(jié)點(diǎn)服務(wù)器、Swarm母雞服務(wù)器、Swarm云節(jié)點(diǎn)服務(wù)器、《Phala PHA挖礦資料大全》、《swarm bzz挖礦資料大全》,Swarm Bee節(jié)點(diǎn)租用請(qǐng)咨詢YINGSOO客服!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信