如何處理快取失效 快取穿透 快取併發等問題

2021-08-28 04:21:53 字數 797 閱讀 7856

快取失效:

引起這個原因的主要因素是高併發下,我們一般設定乙個快取的過期時間時,可能有一些會設定5分鐘啊,10分鐘這些;併發很高時可能會出在某乙個時間同時生成了很多的快取,並且過期時間在同一時刻,這個時候就可能引發——當過期時間到後,這些快取同時失效,請求全部**到db,db可能會壓力過重。

處理方法:

乙個簡單方案就是將快取失效時間分散開,不要所以快取時間長度都設定成5分鐘或者10分鐘;比如我們可以在原有的失效時間基礎上增加乙個隨機值,比如1-5分鐘隨機,這樣每乙個快取的過期時間的重複率就會降低,就很難引發集體失效的事件。

快取失效時產生的雪崩效應,將所有請求全部放在資料庫上,這樣很容易就達到資料庫的瓶頸,導致服務無法正常提供。盡量避免這種場景的發生。

快取穿透:

出現場景:指查詢乙個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。

當在流量較大時,出現這樣的情況,一直請求db,很容易導致服務掛掉。

處理方法:

方法2.如果乙個查詢返回的資料為空(不管是資料不存在,還是系統故障),我們仍然把這個空結果進行快取,但它的過期時間會很短,一般只有幾分鐘。

方法3.採用布隆過濾器,將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一定不存在的資料會被這個bitmap攔截掉,從而避免了對底層儲存系統的查詢壓力。

快取併發: 

處理方法:對快取查詢加鎖,如果key不存在,就加鎖,然後查db入快取,然後解鎖;其他程序如果發現有鎖就等待,然後等解鎖後返回資料或者進入db查詢。

快取穿透 快取併發 快取失效

一 快取穿透 二 快取併發 有時候如果 併發訪問高,乙個快取如果失效,可能出現多個程序同時查詢db,同時設定快取的情況,如果併發確實很大,這也可能造成db壓力過大,還有快取頻繁更新的問題。三 快取失效 引起這個問題的主要原因還是高併發的時候,平時我們設定乙個快取的過期時間時,可能有一些會設定5分鐘啊...

redis的快取穿透 快取併發 快取失效

學習 截選乙個集體快取失效解決辦法 引起這個問題的主要原因還是高併發的時候,平時我們設定乙個快取的過期時間時,可能有一些會設定1分鐘啊,5分鐘這些,併發很高時可能會出在某乙個時間同時生成了很多的快取,並且過期時間都一樣,這個時候就可能引發一當過期時間到後,這些快取同時失效,請求全部 到db,db可能...

快取失效,穿透,雪崩

快取可以狹義的理解為是擋在db之前的一層資料塊,效能比db高很多倍。服務系統查資料,首先會查快取,如果快取資料不存在,就進一步查 db,最後查到資料後回種到快取並返回。快取裡的資料儲存基本上都是以 key 為索引進行儲存和獲取的。原因 寫快取時一般都會帶上乙個過期時間,讓快取資料在這個固定的過期時間...