目前後端用的緩存,主流的有Redis,對於高併發的系統,實際上會遇到以下的幾個問題:
(前提是一般的業務代碼中,緩存空則去請求數據庫)
1、緩存雪崩現象:由於訪問了沒有緩存,或者已經過期的KEY,導致大量請求到達數據庫
2、緩存擊穿:單個KEY的高併發訪問,高負載導致命中丟失,大量併發查詢到達數據庫
so,如何設計
-
針對第一個問題,圍繞着解決緩存爲空的空窗期,有兩種方案:
一、讀寫分離。業務代碼只負責讀,定時腳本負責寫
二、設置兩個過期時間,一個是業務邏輯上的過期時間,另一個是相對滯後的實際過期時間,在兩個時間點之間,對緩存進行更新
-
針對第二個問題,把單KEY節點的負載訪問,隨機分散到幾個緩存副本節點中。更新的時候,緩存副本全部同步更新。
以上。