快取穿透 擊穿 雪崩以及解決方案

2021-10-08 23:47:46 字數 929 閱讀 9502

實際運用場景中,經常遇到高併發,尤其在秒殺、熱點資料,某一時刻產生大量併發請求,如果直接請求資料庫,會造成資料庫癱瘓,造成整個服務不可用,為了避免這種情況發生,經常用到快取技術,來緩衝高併發請求。

引入快取技術,能夠緩解資料庫壓力,提供系統效能,系統更加健壯。但是同時快取技術會引發快取穿透、擊穿、雪崩,這些情況需要提前考慮好,做好防護。以redis 為例,講解下如何發生的,該如何處理

某一瞬時大批量請求集中訪問乙個key(上百上千萬請求), 如果此時快取過期失效,快取中資料不存在, 資料庫存在,所有請求瞬間集中到資料庫,會造成資料庫癱瘓,這就是記憶體擊穿

設定熱點資料永不過期

新增互斥鎖:枷鎖之後,保證每乙個key,只有乙個執行緒去執行,其他執行緒等待。

請求的資料在記憶體不存在,去資料庫查詢,查到寫入快取。如果資料庫中也不存在,無法寫入快取,其他請求會繼續去資料庫查詢,這就是快取穿透。總結起來就一話:快取和資料庫都沒有資料

使用布隆過濾器布隆過濾器

某一時刻快取集群失效,如reds 掛了,造成快取雪崩。雪崩後果很嚴重

redis的高可用。 redis可能掛掉,這個時候第一保證高可用。

限流降級,快取失效後的處理,(加鎖,返回預定的物件)

資料預熱, 在正式的部署之前,先將這批資料放入到redis快取中,假設即將發生高併發的情況,這個時候設定不同的過期時間。保證部分節點可用

在進行redis資料寫入時引入sync同步**塊(併發寫請求個數=該業務的集群節點數)

(六)redis快取穿透,擊穿,雪崩以及解決方案

專案中業務資料基本上都是存在關係型資料庫中,如 mysql,oracle,sqlserver等資料庫,專案上線初期,由於使用者規模還比較小,系統訪問量不大。關係性資料庫可以抗住併發較小的請求。隨著業務的增長使用者的增加系統整體的併發請求增大。關係型資料庫處理能力跟不上,在對資料庫做主從讀寫分離,分布...

快取穿透,快取擊穿,快取雪崩解決方案方案

設計乙個快取系統,不得不要考慮的問題就是 快取穿透 快取擊穿與失效時的雪崩效應。快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能db就掛掉了,...

快取穿透,快取擊穿,快取雪崩解決方案

快取穿透 快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。解決方案 有...