快取穿透與快取雪崩

2021-09-07 05:34:35 字數 1071 閱讀 7411

一般的快取系統,都是依照key去快取查詢,假設不存在相應的value,就應該去後端系統查詢(比方db)。

假設key相應的value是一定不存在的,而且對該key併發請求量非常大。就會對後端系統造成非常大的壓力。這就叫做快取穿透。

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

2:對一定不存在的key進行過濾。

能夠把全部的可能存在的key放到乙個大的bitmap中。查詢時通過該bitmap過濾。

【感覺應該用的不多吧】

當快取server重新啟動或者大量快取集中在某乙個時間段失效,這樣在失效的時候,也會給後端系統(比方db)帶來非常大壓力。

1:在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。

比方對某個key僅僅同意乙個執行緒查詢資料和寫快取。其它執行緒等待。

2:不同的key,設定不同的過期時間,讓快取失效的時間點盡量均勻。

3:做二級快取,a1為原始快取,a2為拷貝快取,a1失效時。能夠訪問a2。a1快取失效時間設定為短期,a2設定為長期(此點為補充)

快取一致性問題

1:快取系統與底層資料的一致性。

這點在底層系統是「可讀可寫」時。寫得尤為重要 

2:有繼承關係的快取之間的一致性。為了盡量提高快取命中率。快取也是分層:全域性快取,二級快取。

他們是存在繼承關係的。全域性快取能夠有二級快取來組成。 

3:多個快取副本之間的一致性。為了保證系統的高可用性,快取系統背後往往會接兩套儲存系統(如memcache,redis等)

快取穿透和快取雪崩

上面有講述。

快取淘汰的策略有兩種: (1) 定時去清理過期的快取。 (2)當實使用者請求過來時,再推斷這個請求所用到的快取是否過期。過期的話就去底層系統得到新資料並更新快取。 

兩者各有優劣,第一種的缺點是維護大量快取的key是比較麻煩的,另外一種的缺點就是每次使用者請求過來都要推斷快取失效,邏輯相對照較複雜。詳細用哪種方案。大家能夠依據自己的應用場景來權衡。

1. 預估失效時間 

2. 版本(必須單調遞增,時間戳是最好的選擇)

3. 提供手動清理快取的介面。

快取穿透與快取雪崩

一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 如果key對應的value是一定不存在的,並且對該key併發請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。1 對查詢結果為空的情況也進行快取,快取時間設定短一點,或者該key對應的資料...

快取穿透與快取雪崩

引用原文 快取系統不得不考慮的另乙個問題是快取穿透與失效時的雪崩效應。快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。有 很多種方法可以有效地解決快取穿透問題,...

快取穿透與快取雪崩

一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 如果key對應的value是一定不存在的,並且對該key併發請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。1 對查詢結果為空的情況也進行快取,快取時間設定短一點,或者該key對應的資料...