Rdis 緩存雪崩 緩存穿透

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

出現(xiàn)原因:

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

redis服務宕機。

解決方案:

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

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

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

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

解決方案:

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

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

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

出現(xiàn)原因:

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

惡意請求攻擊

解決方案:

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

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

前端有效值校驗。

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

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容