目前后端用的緩存,主流的有Redis顽照,對于高并發(fā)的系統(tǒng)由蘑,實際上會遇到以下的幾個問題:
(前提是一般的業(yè)務(wù)代碼中,緩存空則去請求數(shù)據(jù)庫)
1代兵、緩存雪崩現(xiàn)象:由于訪問了沒有緩存尼酿,或者已經(jīng)過期的KEY,導(dǎo)致大量請求到達數(shù)據(jù)庫
2植影、緩存擊穿:單個KEY的高并發(fā)訪問裳擎,高負(fù)載導(dǎo)致命中丟失,大量并發(fā)查詢到達數(shù)據(jù)庫
so思币,如何設(shè)計
-
針對第一個問題鹿响,圍繞著解決緩存為空的空窗期,有兩種方案:
一谷饿、讀寫分離抢野。業(yè)務(wù)代碼只負(fù)責(zé)讀,定時腳本負(fù)責(zé)寫
二各墨、設(shè)置兩個過期時間指孤,一個是業(yè)務(wù)邏輯上的過期時間,另一個是相對滯后的實際過期時間,在兩個時間點之間恃轩,對緩存進行更新
-
針對第二個問題结洼,把單KEY節(jié)點的負(fù)載訪問,隨機分散到幾個緩存副本節(jié)點中叉跛。更新的時候松忍,緩存副本全部同步更新。
以上筷厘。