Rdis 緩存雪崩 緩存穿透

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

出現原因:

給緩存設置了過期時間,且大範圍的緩存數據的過期時間一致。

redis服務宕機。

解決方案:

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

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

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

出現原因:熱點數據過期,或者被其他手段刪除。

解決方案:

對於熱點數據緩存時不設置過期時間。

第一個請求發現熱點數據不在redis緩存中,可以先阻塞其他請求,等到第一個請求將數據庫數據讀出來並緩存到redis後再喚醒其他請求從緩存服務中讀取熱點數據。

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

出現原因:

業務層誤操作訪問到了不會存在的數據。

惡意請求攻擊

解決方案:

第一個請求發現熱點數據不在redis緩存中和數據庫中,可以先阻塞其他請求,緩存一個缺省值返回。

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

前端有效值校驗。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章