緩存雪崩、緩存穿透、緩存擊穿

1.緩存雪崩:是指當(dāng)系統(tǒng)首次上線(xiàn)或者緩存服務(wù)不可用時(shí),所有的請(qǐng)求都直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),高并發(fā)的情況下會(huì)直接將數(shù)據(jù)庫(kù)打死,這就是緩存雪崩。

解決方案:1.數(shù)據(jù)預(yù)熱:對(duì)于系統(tǒng)首次上線(xiàn),需要將高頻訪(fǎng)問(wèn)的數(shù)據(jù)提前加載到緩存系統(tǒng)中,減少高并發(fā)情況下數(shù)據(jù)未命中緩存而直接打死數(shù)據(jù)庫(kù)。2.線(xiàn)上緩存服務(wù)要采用集群的方式部署,這樣不至于一臺(tái)機(jī)器宕機(jī)后整個(gè)緩存服務(wù)不可用。

2.緩存穿透:是指當(dāng)每秒5000的并發(fā)時(shí),其中4000的請(qǐng)求是惡意的攻擊,這4000的請(qǐng)求數(shù)據(jù)都無(wú)法命中緩存,同時(shí)也無(wú)法命中數(shù)據(jù)庫(kù)(例如:查詢(xún)的id為-1的數(shù)據(jù)),這樣也會(huì)將數(shù)據(jù)庫(kù)打死。

解決方案:1.對(duì)非法數(shù)據(jù)進(jìn)行攔截過(guò)濾。2.當(dāng)請(qǐng)求數(shù)據(jù)在緩存未找到,查詢(xún)數(shù)據(jù)庫(kù),發(fā)現(xiàn)也不存在,這時(shí)在緩存中記錄一個(gè)null或者unknown,并設(shè)置較為短暫有效期,這樣能保證在下次查詢(xún)時(shí)不會(huì)直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。另外注意一點(diǎn)就是有效期不能統(tǒng)一,這樣會(huì)造成在同一時(shí)刻所有緩存中數(shù)據(jù)所有數(shù)據(jù)失效,從而再次造成緩存穿透甚至緩存雪崩。

3.緩存擊穿:是指熱點(diǎn)數(shù)據(jù)瞬間失效后,大量并發(fā)請(qǐng)求,直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),造成數(shù)據(jù)庫(kù)壓力。

解決方案:1.設(shè)置熱點(diǎn)數(shù)據(jù)永不失效。2.加互斥鎖:如果數(shù)據(jù)未命中緩存,對(duì)請(qǐng)求數(shù)據(jù)加鎖,如果加鎖成功,則訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),并將數(shù)據(jù)回寫(xiě)到緩存中;如果該數(shù)據(jù)加鎖失敗,則表示已經(jīng)有請(qǐng)求在查詢(xún)數(shù)據(jù)庫(kù)了,這時(shí)候可以sleep 100ms,再查詢(xún)緩存。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容