快取穿透,擊穿,雪崩

2021-10-03 13:14:54 字數 1161 閱讀 5078

快取穿透:在高併發下,查詢乙個不存在的值時,快取不會被命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢乙個不存在的活動。

快取擊穿:在高併發下,對乙個特定的值進行查詢,但是這個時候快取正好過期了,快取沒有命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢活動資訊,但是在活動進行過程中活動快取突然過期了。

快取雪崩:在高併發下,大量的快取key在同一時間失效,導致大量的請求落到資料庫上,如活動系統裡面同時進行著非常多的活動,但是在某個時間點所有的活動快取全部過期。

解決方案:

sdfasdf

限流:常用方法有佇列、加鎖;令牌桶演算法、漏桶演算法、滑動視窗。

layering-cache主要採用 分布式鎖來做限流。

多級快取框架layering-cache介紹:

直接快取null值示例如下:

//配置快取非空值和null值之間的過期時間倍率

@cacheable(value = "people", key = "#person.id", depict = "使用者資訊快取",

firstcache = @firstcache(expiretime = 10, timeunit = timeunit.minutes),

secondarycache = @secondarycache(expiretime = 10, timeunit = timeunit.hours,

isallownullvalue = true, magnification = 10))

public person findone(person person)

明細:

該示例表示,isallownullvalue = true表示允許換存null值,magnification = 10表示null值和非null值之間的時間倍率是10,也就是說當快取值為null是,二級快取的有效時間將是1個小時。

layering-cache對null值進行了特殊處理,一級快取不允許存null值,二級快取可以配置快取是否允許存null值,如果配置可以允許存null值,框架還支援配置快取非空值和null值之間的過期時間倍率,這使得我們能精準的控制每乙個快取的null值過期時間,控制粒度非常細。當null快取過期我還可以使用限流,快取預熱等手段來防止穿透。

fasdfasd

快取穿透,擊穿,雪崩

一 快取處理流程 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。二 快取穿透 描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時的使...

快取穿透 擊穿 雪崩

快取和資料庫中都沒有資料,而使用者不斷發起請求。如請求id為 1的資料。介面增加校驗,如使用者鑑權,id做基礎校驗 對key null做短時間快取 快取中沒有但資料庫中有的資料 一般是快取時間到期 這時併發量大,同時快取讀資料沒有,又同時去資料庫取資料,引起資料庫壓力瞬間增大。讀取資料庫資料,加互斥...

快取穿透,擊穿,雪崩

一 快取處理流程 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。二 快取穿透 描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時的使...