詳解Java?redis中緩存穿透?緩存擊穿?雪崩三種現(xiàn)象以及解決方法
前言
本文主要闡述redis中的三種現(xiàn)象
1.緩存穿透
2.緩存擊穿
3.雪崩現(xiàn)象
本文主要說明本人對(duì)三種情況的理解,如果需要知道redis基礎(chǔ)請(qǐng)查看其他博客,加油!
一、緩存穿透
理解:何為緩存穿透,先要了解穿透,這樣有助于區(qū)分穿透和擊穿,穿透就類似于傷害一點(diǎn)一點(diǎn)的累計(jì),最終打到穿透的目的,類似于射手,一下一下普通攻擊,最終殺死對(duì)方,先上圖
先來描述一下緩存穿透的過程:
1.由于我們?nèi)?shù)據(jù)的原則是先查詢r(jià)edis上,如果redis上有數(shù)據(jù)那么我們就取redis,如果沒有則對(duì)數(shù)據(jù)庫進(jìn)行查詢
2.當(dāng)我們的應(yīng)用服務(wù)器壓力變大(例如我們雙十一進(jìn)行購物)
3.那么我們同時(shí)大量數(shù)據(jù)訪問redis,而redis中只有其中幾條數(shù)據(jù)的信息,那么我們就會(huì)對(duì)數(shù)據(jù)庫進(jìn)行大量的查詢(redis命中率降低)
4.導(dǎo)致數(shù)據(jù)庫崩潰
以上的過程就是緩存穿透
解決辦法:
1.對(duì)空值進(jìn)行緩存
2.設(shè)置黑(白)名單
3.采用布隆過濾器(布隆底層實(shí)際原理類似于優(yōu)化版的使用bitmap進(jìn)行緩存查詢)
二、緩存擊穿
理解:何為緩存擊穿,擊穿其實(shí)就是類似于爆發(fā)傷害,類似于高爆發(fā)的法師,一套技能瞬間殺死對(duì)方,上圖
先來描述一下緩存擊穿的過程:
1.由于我們?nèi)?shù)據(jù)的原則是先查詢r(jià)edis上,如果redis上有數(shù)據(jù)那么我們就取redis,如果沒有則對(duì)數(shù)據(jù)庫進(jìn)行查詢,擊穿的結(jié)果是redis還在正常運(yùn)行,mysql崩了
2.當(dāng)我們數(shù)據(jù)庫(mysql)訪問量瞬間增加(例如我們雙十一進(jìn)行搶制定的商品)
3.而此時(shí),我們的redis上相對(duì)應(yīng)的key突然過期,那么我們把查詢壓力全給mysql
4.導(dǎo)致數(shù)據(jù)庫崩潰
以上的過程就是緩存擊穿
解決辦法:
1.預(yù)先設(shè)置熱門數(shù)據(jù)(例如先緩存好制定商品的信息)
2.實(shí)施調(diào)整(人工延長(zhǎng)key過期時(shí)間)
3.使用鎖(影響效率)
三、雪崩現(xiàn)象
理解:何為雪崩,顧名思義,就是一片雪花導(dǎo)致整個(gè)系統(tǒng)的崩盤,先上圖
先來描述一下緩存擊穿的過程:
1.由于我們?nèi)?shù)據(jù)的原則是先查詢r(jià)edis上,如果redis上有數(shù)據(jù)那么我們就取redis,如果沒有則對(duì)數(shù)據(jù)庫進(jìn)行查詢
2.當(dāng)我們服務(wù)器壓力變大(例如雙十一購物)
3.而此時(shí),我們的redis上大量的key過期,導(dǎo)致數(shù)據(jù)庫壓力劇增,返回給服務(wù)器的效率變低
4.由于效率變低,導(dǎo)致我們r(jià)edis中緩存過多請(qǐng)求,導(dǎo)致redis崩潰
5.最終導(dǎo)致整個(gè)系統(tǒng)的崩盤
以上的過程就是雪崩
解決辦法:
1.構(gòu)建多級(jí)緩存(nginx緩存+redis緩存+其他緩存)
2.使用鎖或者隊(duì)列
3.設(shè)置過期標(biāo)志自動(dòng)更新
4.錯(cuò)開key的過期時(shí)間(建議3 4結(jié)合使用)
總結(jié)
1.redis妙用很多,需要在實(shí)際應(yīng)用場(chǎng)景體會(huì)
2.思想很重要,基礎(chǔ)也很重要
3.謝謝尚硅谷的老師
4.歡迎討論指出錯(cuò)誤
到此這篇關(guān)于詳解Java redis中緩存穿透 緩存擊穿 雪崩三種現(xiàn)象以及解決方法的文章就介紹到這了,更多相關(guān)Java redis 緩存穿透 緩存擊穿 雪崩內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章

SpringBoot集成內(nèi)存數(shù)據(jù)庫Derby的實(shí)踐

SpringSecurity?用戶帳號(hào)已被鎖定的問題及解決方法

java實(shí)現(xiàn)簡(jiǎn)單的圖書借閱系統(tǒng)

Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法

Spring Boot 在啟動(dòng)時(shí)進(jìn)行配置文件加解密的方法詳解