Redis 緩存如何出錯?
作者:李華
當緩存或數據庫中不存在 key 時,就會發生這種情況。應用程序無法從數據庫中檢索相關數據來更新緩存。這個問題給緩存和數據庫都造成了很大的壓力。
緩存系統如何出錯?
下圖顯示了緩存可能出錯的 4 種典型情況及其解決方案。
01 雷群問題(Thurder Hurd)
當緩存中的大量 key 同時過期時,就會出現這種情況。然后,查詢請求直接沖擊數據庫,導致數據庫超載。
有兩種方法可以緩解這一問題:
- 避免為 key 設置相同的過期時間,在配置中添加一個隨機數;
- 只允許核心業務數據訪問數據庫,而在緩存恢復之前阻止非核心數據訪問數據庫。
02 緩存滲透(Cache Penetration)
當緩存或數據庫中不存在 key 時,就會發生這種情況。應用程序無法從數據庫中檢索相關數據來更新緩存。這個問題給緩存和數據庫都造成了很大的壓力。
要解決這個問題,有兩種建議。
- 為不存在的 key 緩存一個空值,避免對數據庫造成沖擊。
- 使用 bloom 過濾器先檢查 key 是否存在,如果 key 不存在,我們就可以避免對數據庫的訪問。
03 緩存崩潰(Cache Breakdown)
這與雷群問題類似。它發生在熱鍵過期時。大量請求會訪問數據庫。
解決方案:由于熱鍵占據了 80% 的查詢量,我們沒有為它們設置過期時間。
04 緩存崩潰(Cache Crash)
當緩存崩潰時,所有請求都會進入數據庫。
有兩種方法可以解決這個問題。
- 設置斷路器 (Circuit Breaker),當緩存宕機時,應用服務無法訪問緩存或數據庫。
- 為高速緩存建立一個集群,以提高高速緩存的可用性。
責任編輯:武曉燕
來源:
ByteByteGo