快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。
有很多種方法可以有效地解決快取穿透問題,最常見的則是:
快取雪崩是指在設定快取時採用了相同的過期時間,導致快取在某一時刻同時失效,請求全部**到db,db瞬時壓力過重雪崩。
乙個存在的key,在快取過期的一刻,同時有大量的請求,這些請求都會擊穿到db,造成瞬時db請求量大、壓力驟增。
以上兩個問題同時出現,可能會對系統造成乙個致命問題:在快取失效的瞬間,有大量執行緒來構建快取,造成後端負載加大,甚至可能會讓系統崩潰 。
乙個併發量較大的網際網路應用,目標有3個:
加快使用者訪問速度,提高使用者體驗。
降低後端負載,保證系統平穩。
保證資料「盡可能」及時更新(要不要完全一致,取決於業務,而不是技術)。
解決方案
優點缺點
簡單分布式鎖
思路簡單、保證一致性
加另外乙個過期時間
保證一致性
永遠不過期
非同步構建快取,不會阻塞執行緒池
不保證一致性、**複雜度增大(每個value都要維護乙個timekey)、占用一定的記憶體空間(每個value都要維護乙個timekey)
資源隔離元件hystrix
hystrix技術成熟,有效保證後端、hystrix監控強大
部分訪問存在降級策略
快取常見問題及解決方案
使用快取可以緩解大流量壓力,顯著提高程式的效能。我們在使用快取系統時,尤其是大併發情況下,經常會遇到一些 疑難雜症 本文總結了一些使用快取時常見的問題及解決方案,以後在遇到這類問題時可以作為參考,在設計快取系統的時候也應該考慮這些常見的情況。為了表述方便,本文以資料庫查詢快取為例,使用快取可以減小對...
redis快取常見問題及解決方案
快取雪崩 當快取伺服器重啟或者大量快取集中在某乙個時間段失效,這樣在失效的時候,會給後端系統帶來很大壓 力。導致系統崩潰。解決方案 在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許乙個線 程查詢資料和寫快取,其他執行緒等待。做二級快取,a1為原始快取,a2為拷貝...
Redis快取常見問題及解決方案
可以簡單的理解為 系統剛剛部署完畢,所有快取資料還未準備完畢或者由於原有快取有效期集體到達 例如 系統中所有快取都設定的一致的過期時間,在同一時刻出現大面積的快取過期,所以原本應該查詢快取的請求都去查詢資料庫了,造成資料庫壓力驟增,甚至宕機.使用加鎖或者佇列的方式保證不會有大量執行緒對資料庫進行一次...