經(jīng)典緩存設(shè)計方案
CacheAside
3.PNG
優(yōu)點:簡單易于實現(xiàn)
缺點:自己維護數(shù)據(jù)更新后的同步邏輯腿短;對業(yè)務(wù)代碼有侵入性
Reade\Write Through
4.PNG
優(yōu)點:把緩存和數(shù)據(jù)庫看作一個整體塔淤,業(yè)務(wù)邏輯只需要讀取和寫入數(shù)據(jù),不需要關(guān)心數(shù)據(jù)來源于緩存還是數(shù)據(jù)庫叉跛,不需要維護同步邏輯
缺點:需要自己封裝好緩存和數(shù)據(jù)庫的同步邏輯
WriteBack
writeback.PNG
寫入只更新緩存预侯,異步同步到數(shù)據(jù)庫
優(yōu)點:讀寫都是操作內(nèi)存朗伶,性能高
缺點:數(shù)據(jù)不是強一致性屯断;宕機可能丟數(shù)據(jù)
異步更新到緩存
2.PNG
優(yōu)點:引入緩存后對原有系統(tǒng)改動較少;
缺點:存在數(shù)據(jù)不一致性瞒瘸;沒提升寫性能
常見問題及解決
大并發(fā)場景下需要關(guān)注以下緩存使用問題
緩存穿透
高并發(fā)查詢數(shù)據(jù)庫與緩存都沒有的key坷备,可能是惡意攻擊
緩存穿透1.PNG
解決辦法:
- 給不存在的key,預(yù)先設(shè)置值情臭,查詢到之后應(yīng)用決定放棄還是等待一段時間省撑,避免打到數(shù)據(jù)庫;
- 借助布隆過濾器
緩存并發(fā)
大量并發(fā)請求同時查詢一個不在緩存的key俯在,導(dǎo)致全打到數(shù)據(jù)庫竟秫,查詢到之后又都更新到緩存
緩存并發(fā).PNG
解決辦法:引入鎖機制,只允許一個請求轉(zhuǎn)發(fā)到數(shù)據(jù)庫
緩存并發(fā)解決PNG.PNG
緩存雪崩
大量緩存在同一時間同時失效跷乐,導(dǎo)致大量請求都打到數(shù)據(jù)庫
解決辦法:失效時間隨機肥败;或者緩存不過期
熱點數(shù)據(jù)
為提高命中率,按照訪問頻率以及訪問時間對數(shù)據(jù)進行排序愕提,優(yōu)先保留使用頻率高以及最近使用的數(shù)據(jù)
熱點數(shù)據(jù).PNG
總結(jié)
總結(jié).PNG