緩存的穿透、擊穿、雪崩的概念及解決方案

1.緩存領域相關的概念

1.1.緩存命中:數據存在於緩存中,不需要從數據庫取

1.2.Cache miss:數據不存在於緩存中,需要從數據庫取,如果還有緩存空間,一般會把取到的數據加入到緩存

1.3.存儲成本:緩存未命中時,將從數據庫取得的數據加入到緩存所需要的時間和空間,稱爲緩存成本

1.4.緩存失效:數據庫中的數據發生變化時,緩存中對應的數據即爲失效數據

1.5.緩存污染:將不經常訪問的數據放置到緩存中,致使高頻訪問數據無法放入緩存

1.6.替代策略:當緩存空間不足時,需要刪除緩存空間中已有的數據,選擇刪除數據的策略爲替代策略

 

2.緩存場景

2.1.緩存穿透

現象:每次請求都無法在緩存中找到數據,需要直接查數據庫,增加了數據庫壓力

原因:通常對於在緩存中找不到的數據,一般的做法是去查找數據庫,將查到的數據加入到緩存中,但如果數據庫也查不到,就不會被加入到緩存,所以對於不存在的key,每一次請求都會直接查數據庫,故緩存被穿透,形同虛設

解決方案:

a.保存所有有效的key,過濾掉不存在的key

b.如果緩存空間夠大,從數據庫查不到數據時,保存一個空對象到緩存中

c.針對業務場景對請求的參數進行有效性校驗,過濾非法請求

 

2.2.緩存擊穿

現象:當某一個key失效時,造成大量請求到數據庫

原因:爲了保證緩存數據的時效性,通常會設置一個有效時間,如果是熱點key,在熱點key失效時,高併發時會有大量請求越過緩存層到數據庫

解決方案:

a.使用互斥鎖,當緩存數據失效時,保證只有一個請求能訪問數據庫,並更新緩存

b.設置緩存數據永不過期。但是這樣會造成緩存失效的問題,所以可以在緩存數據失效之前,用異步的方式提前更新緩存

 

2.3緩存雪崩

現象:多個key失效,造成大量請求到數據庫

原因:在設置緩存時採用了相同的過期時間,導致多個緩存數據在某一個時刻同時失效,大量請求到數據庫

解決方案:

a.使用互斥鎖,保證對於同一個key,只有一個請求能到數據庫

b.在統一的失效時間的基礎上,加上一個隨機值

c.在緩存數據失效前,用異步的方式提前更新緩存

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