天天看點

緩存雪崩與緩存穿透

緩存雪崩

當 緩存伺服器(如redis)重新開機 或者 大量緩存集中在某一個時間段失效,這樣在失效的時候,會給後端系統(如資料庫DB)帶來很大壓力。導緻系統崩潰。

如何避免 緩存雪崩?

1:在 緩存失效 後,通過加鎖或者隊列來控制 讀資料庫 寫緩存的線程數量。比如對某個key隻允許一個線程查詢資料和寫緩存,其他線程等待。

2:做二級緩存,A1為原始緩存,A2為拷貝緩存,A1失效時,可以通路A2,A1緩存失效時間設定為短期,A2設定為長期

3:對key的失效時間加個随機數(不同的key,設定不同的過期時間)讓緩存失效的時間點盡量均勻

緩存穿透

一般的緩存系統,都是按照key去緩存查詢,如果不存在對應的value,就應該去後端系統查找(比如DB)。一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做緩存穿透

如何避免 緩存穿透?

1:對查詢結果為空的情況也進行緩存,緩存時間設定短一點,或者該key對應的資料insert了之後清理緩存。

2:對一定不存在的key進行過濾。可以把所有的可能存在的key放到一個大的Bitmap中,查詢時通過該bitmap過濾。