快取穿透:在高併發下,查詢乙個不存在的值時,快取不會被命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢乙個不存在的活動。
快取擊穿:在高併發下,對乙個特定的值進行查詢,但是這個時候快取正好過期了,快取沒有命中,導致大量請求直接落到資料庫上,如活動系統裡面查詢活動資訊,但是在活動進行過程中活動快取突然過期了。
快取雪崩:在高併發下,大量的快取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為特別大不存在的資料。這時的使...