一快取擊穿
在平常的高併發系統中,大量請求同時查詢乙個key時,此時key正好失效了,就會導致大量的請求都達到資料庫上面去,這種場景我們成為快取擊穿。
影響:會造成某一時刻資料庫流量過大,壓力劇增
解決方案:
1.設定熱點資料永不過期
2.擊穿原因是多個執行緒同時查詢資料庫,可在第乙個查詢資料的請求上使用乙個互斥鎖,其他執行緒拿不到鎖進行等待,等第乙個執行緒返回後做快取,後邊執行緒發現快取中有資料後直接走快取
二快取穿透
使用者查詢資料,在資料庫中沒有,自然快取中也不會有,因此快取中不存在對應的key和value,每次都要去資料庫查詢然後返回空(相當於進行了兩次無用查詢),這樣請求就繞過快取直接查詢資料庫
影響:增加資料庫壓力、大量不存在的key刷單時容易造成資料庫宕機
解決方案:
1.快取空值:如果乙個查詢返回空的資料,我們仍然把這個空的結果進行快取,但是他的過期時間會很短,比方說5分鐘以內,通過設定預設值到快取,再次查詢時快取中就有值了,而不會繼續請求資料庫
2.採用bloomfilter:
三快取雪崩
如果快取集中在一段時間內失效,發生大量的快取穿透,所有的查詢都落到資料庫上,造成了快取雪崩,由於原有快取實失效,新快取未到期間所有快取的請求都去查詢資料庫,而對資料庫cpu和記憶體造成巨大壓力、甚至宕機
解決方案:
1)加鎖排隊:mutext互斥鎖,redis的setnx
3)雙層快取策略:c1為 原始快取、c2拷貝快取、c1失效時可以訪問c2,c2快取失效時間設定為短期,c1設定為長期
4)定時更新快取策略:實時性要求不高的快取,容器啟動初始化載入、採用定時任務更新或者移出快取
5)設定不同的過期時間;讓快取失效時間盡量均勻
高併發場景下快取的常見問題
1快取一致性問題 當資料時效性要求很高時,需要保證快取中的資料與資料庫中的保持一致,而且需要保證快取節點和副本中的資料也保持一致,不能出現差異現象。這就比較依賴快取的過期和更新策略。一般會在資料發生更改的時,主動更新快取中的資料或者移除對應的快取。2快取併發問題 快取過期後將嘗試從後端資料庫獲取資料...
高併發場景下的快取常見的問題
當資料時效性要求很高時,需要保證快取中的資料與資料庫中的保持一致,而且需要保證快取節點和副本中的資料也保持一致,不能出現差異現象。這就比較依賴快取的過期和更新策略。一般會在資料發生更改的時,主動更新快取中的資料或者移除對應的快取。快取過期後將嘗試從後端資料庫獲取資料,這是乙個看似合理的流程。但是,在...
快取在高併發場景下的常見問題
當資料時效性要求很高時,需要保證快取中的資料與資料庫中的保持一致,而且需要保證快取節點和副本中的資料也保持一致,不能出現差異現象。這就比較依賴快取的過期和更新策略。一般會在資料發生更改的時,主動更新快取中的資料或者移除對應的快取。快取過期後將嘗試從後端資料庫獲取資料,這是乙個看似合理的流程。但是,在...