快取雪崩是指在快取中的大量資料在同一個時刻全部過期,導致原本這些可以由快取中間件處理的高并發請求,一下子全部打到資料庫,導致資料庫服務器崩潰的一種現象,那么出現快取雪崩的原因可以有①:快取中間件宕機,②:快取中大部分key都設定了相同的時間,導致這些key在同一時間內全部失效,解決的方法:
①:可以對這些個key設定可以失效的隨機值,避免同時失效的問題,
②:還可以對資料庫的讀寫加鎖,不讓那么瞬時高并發的請求一下子突然打到資料庫上,
③:即使如果真的發生了快取雪崩,使用資料庫的主從復制、雙主、讀寫分離等策略,資料庫本身的容災能力應該還是可以承受住的,
快取穿透是指快取穿透是指在使用快取系統的應用程式中,惡意請求或者無效的請求頻繁地訪問快取中不存在的資料,導致大量請求直接訪問后端資料庫或服務,而繞過了快取系統的情況,可能出現的原因其實是可出現了惡意攻擊行為,對于一個成熟的系統來說,由于快取預熱的不斷加載,即便是出現了一個不存在的key,影響也不會很大,那么惡意攻擊行為可能具有持久性,確認這個key在資料庫中不存在,才會達到這樣一個行為,解決的方法:
①:把這些無效的key保存到Redis里面,并設定一個null的特殊值,這樣就不會去查資料庫了,但是如果攻擊者一直惡意攻擊同樣會出現相同的問題,
②:使用布隆過濾器來實作,把這些資料全部放到布隆過濾器里面,當進行查詢時,先到布隆過濾器里面進行查詢,如果查詢不存在,那么這個key在資料庫中肯定也不會存在,那么就不會去訪問資料庫了,
③:快取預熱,預先加載熱點資料到快取中,避免在某些特定時刻,高并發的請求打到資料庫上,
快取擊穿是指當某個熱點資料過期或被主動移除時,大量的并發請求同時訪問該資料庫,導致快取無法命中,進而直接訪問資料庫或后端服務,對應的解決方案:
①:設定熱點資料的永不過期策略:對于一些非常熱點且不經常變動的資料,可以將其快取設定為永不過期,確保資料一直存在于快取中,避免了過期導致的擊穿問題,
②:延遲快取更新策略(快取穿透):當發現某個快取鍵對應的資料不存在時,可以采取一定的策略,如先訪問資料庫或后端服務獲取資料,然后將資料寫入快取,避免了多個并發請求同時訪問資料庫,
③:布隆過濾器(Bloom Filter):布隆過濾器可以用于快速判斷某個鍵是否存在于快取中,如果布隆過濾器判斷鍵不存在,則不會進一步訪問快取或資料庫,從而減輕了快取擊穿的壓力,
④:快取預熱(Cache Pre-warming):在系統啟動或低峰期,預先加載熱點資料到快取中,使其在高峰期可用,從而避免了高并發請求直接訪問資料庫,
這里只列出來一小部分方案????
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/554941.html
標籤:Java
下一篇:返回列表