1 快取失效
引起這個原因的主要因素是高併發下,一般設定乙個快取的過期時間時,併發很高時可能會出在某乙個時間同時生成很多的快取,並且過期時間在同一時刻,這個時候就可能引發——當過期時間到後,這些快取同時失效,請求全部**到db,db可能會壓力過重。
處理方法: 將快取失效時間分散開,不要所以快取時間長度都設定成特定時長;比如在原有的失效時間基礎上增加乙個隨機值,比如1-5分鐘隨機,這樣每乙個快取的過期時間的重複率就會降低,就很難引發集體失效的事件。 快取失效時產生的雪崩效應,將所有請求全部放在資料庫上,這樣很容易就達到資料庫的瓶頸,導致服務無法正常提供。盡量避免這種場景的發生。
2 快取穿透3 快取併發
出現場景:當**併發訪問高,乙個快取如果失效,可能出現多個程序同時查詢db,同時設定快取的情況,如果併發確實很大,這也可能造成db壓力過大,還有快取頻繁更新的問題。
處理方法:對快取查詢加鎖,如果key不存在,就加鎖,然後查db入快取,然後解鎖;其他程序如果發現有鎖就等待,然後等解鎖後返回資料或者進入db查詢。
4 快取雪崩
出現場景:由於快取層承載著大量請求,有效的保護了儲存層,但是如果快取層由於某些原因整體不能提供服務,於是所有的請求都會達到儲存層,儲存層的呼叫量會暴增,造成儲存層也會掛掉的情況。 快取雪崩的英文原意是 stampeding herd(奔逃的野牛),指的是快取層宕掉後,流量會像奔逃的野牛一樣,打向後端儲存。
處理方法:快取高可用,redis sentinel 和 redis cluster 實現
參考文件
快取失效 穿透 併發 雪崩問題及解決方法
1 快取失效 引起這個原因的主要因素是高併發下,一般設定乙個快取的過期時間時,併發很高時可能會出在某乙個時間同時生成很多的快取,並且過期時間在同一時刻,這個時候就可能引發 當過期時間到後,這些快取同時失效,請求全部 到db,db可能會壓力過重。處理方法 將快取失效時間分散開,不要所以快取時間長度都設...
快取失效,穿透,雪崩
快取可以狹義的理解為是擋在db之前的一層資料塊,效能比db高很多倍。服務系統查資料,首先會查快取,如果快取資料不存在,就進一步查 db,最後查到資料後回種到快取並返回。快取裡的資料儲存基本上都是以 key 為索引進行儲存和獲取的。原因 寫快取時一般都會帶上乙個過期時間,讓快取資料在這個固定的過期時間...
快取雪崩 穿透和失效問題
1 快取雪崩 redis 集群徹底崩潰後,大量請求直接打到 mysql 上面,導致 mysql 也崩潰繼而導致源服務乃至整個 崩潰 解決方案 事前 發生快取雪崩之前怎麼防止 redis 掛掉 事中 redis 集群已掛 事後 redis 集群重啟時 2 快取穿透 大量請求在穿過快取直接訪問 redi...