快取擊穿 快取雪崩 快取併發

2021-09-10 22:10:53 字數 696 閱讀 7795

快取擊穿:不存在的key進行大量的高併發訪問,所以快取中不存在這些資料,那麼就需要到資料庫去訪問,大量的訪問直接訪問資料庫,使資料庫崩潰。

解決方案:我們可以將空值快取起來,再次接受同樣的請求時,直接返回,避免訪問資料庫。如果是惡意的,攻擊者會猜測到我們的策略,每次會使用不同的引數來查詢,我們可以對引數進行過濾,可以通過引數的格式或者在引數上放入時間資訊,進行判斷請求是否合法。

快取雪崩:當大量的快取資料由於某些原因在某個時間段失效,會給後端資料庫造成瞬時的負載公升高的壓力,會壓垮資料庫。

解決方法:對不同的資料使用不同的失效時間。

快取併發:在高併發場景下,當乙個快取key過期時,因為訪問這個快取key的請求量過大,多個請求會同時訪問資料庫來查詢最新資料,並回寫到快取。這樣就會造成應用和資料庫的負載增加,如果併發過高,會使資料庫崩潰。

解決辦法:可以使用分布式鎖,保證對於每個key,只有乙個執行緒去訪問後端資料庫,但是對於分布式鎖的壓力較大。也可以使用本地鎖,通過本地鎖限制只有乙個執行緒去訪問資料庫查詢資料,其它執行緒等前面的執行緒查到資料後,再去訪問快取。但是這種解決不了乙個服務有多個節點的問題。還可以使用軟過期來解決這個問題,就是自己設定快取失效的時間,而不使用快取伺服器提供的過期時間,而是業務層在資料中儲存過期時間,由業務程式判斷是否過期並更新,在發現資料即將過期時,將快取的失效延長,然後有乙個執行緒去獲取新資料,其他執行緒看到了延長時間,就繼續使用舊資料,等派遣的執行緒獲取新資料後在更新快取。

快取擊穿 快取併發和快取雪崩

快取擊穿 快取併發和快取雪崩是常見的由於併發量大而導致的快取問題。快取擊穿通常是由惡意攻擊或者無意造成的 快取併發是由設計不足造成的 快取雪崩是由快取同時失效造成的,三種問題都比較典型,也是難以防範和解決的。快取擊穿 快取擊穿指的是使用不存在的key進行大量的高併發查詢,這導致快取無法命中,每次請求...

高併發下快取穿透 快取雪崩,快取擊穿

併發進來後第乙個請求到達資料庫後,得到的資料並不存在,那麼這時返回null,這個null也會同時存在快取中,然而做快取判斷是,快取中為null就會去資料庫中查詢,那麼這時後面的併發,在來查詢這個不存在的資料是都會進入資料庫 導致資料庫壓力過大,從而導致系統崩潰 快取的key大面積的失效,如100萬的...

快取穿透 快取擊穿 快取雪崩

一 快取處理流程 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,那直接返回空結果。二 快取穿透 描述 快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時的使...