Rdis 緩存雪崩 緩存穿透

一. 緩存雪崩
“雪崩來臨的時(shí)候沒有一片雪花是無辜的”。緩存雪崩就是大范圍甚至于整個(gè)redis提供的緩存服務(wù)不可用了,進(jìn)而導(dǎo)致所有的請求都直接到了數(shù)據(jù)庫,甚至于擊垮整個(gè)服務(wù)鏈路。造成整個(gè)服務(wù)不可用。

出現(xiàn)原因:

給緩存設(shè)置了過期時(shí)間,且大范圍的緩存數(shù)據(jù)的過期時(shí)間一致。

redis服務(wù)宕機(jī)。

解決方案:

提前預(yù)案: 給redis過期時(shí)間加隨機(jī)值預(yù)防大面積的緩存同時(shí)過期失效。redis集群高可用可用,哨兵機(jī)制。

兜底方案: 服務(wù)熔斷,服務(wù)降級(jí)。監(jiān)控到緩存服務(wù)不可用時(shí)直接返回,或者限制流量直接請求到數(shù)據(jù)庫層。

二. 緩存擊穿
相交于緩存雪崩大范圍或整體緩存不可用緩存擊穿則是指某個(gè)熱點(diǎn)key過期,導(dǎo)致的緩存失效。常常是一部分熱點(diǎn)數(shù)據(jù),如秒殺產(chǎn)品的庫存數(shù)據(jù)。

出現(xiàn)原因:熱點(diǎn)數(shù)據(jù)過期,或者被其他手段刪除。

解決方案:

對于熱點(diǎn)數(shù)據(jù)緩存時(shí)不設(shè)置過期時(shí)間。

第一個(gè)請求發(fā)現(xiàn)熱點(diǎn)數(shù)據(jù)不在redis緩存中,可以先阻塞其他請求,等到第一個(gè)請求將數(shù)據(jù)庫數(shù)據(jù)讀出來并緩存到redis后再喚醒其他請求從緩存服務(wù)中讀取熱點(diǎn)數(shù)據(jù)。

三. 緩存穿透
緩存穿透則是另外一個(gè)層面,指的時(shí)請求所訪問的數(shù)據(jù)既不在緩存中,也不在數(shù)據(jù)庫中。如果應(yīng)用持續(xù)有大量請求訪問數(shù)據(jù),就會(huì)同時(shí)給緩存和數(shù)據(jù)庫帶來巨大壓力。

出現(xiàn)原因:

業(yè)務(wù)層誤操作訪問到了不會(huì)存在的數(shù)據(jù)。

惡意請求攻擊

解決方案:

第一個(gè)請求發(fā)現(xiàn)熱點(diǎn)數(shù)據(jù)不在redis緩存中和數(shù)據(jù)庫中,可以先阻塞其他請求,緩存一個(gè)缺省值返回。

利用redis提供的布隆過濾器。

前端有效值校驗(yàn)。

四. 總結(jié)
緩存雪崩 ,緩存擊穿 均屬于緩存失效的一種異常緩存雪崩影響范圍大于緩存擊穿。緩存穿透 則是數(shù)據(jù)本身就不在在整個(gè)數(shù)據(jù)存儲(chǔ)層。

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

相關(guān)閱讀更多精彩內(nèi)容

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