數(shù)據(jù)一致性解決方案
方案一:延時雙刪
概述:寫操作前后都進行刪除緩存操作,并設(shè)置合理超時時間
步驟
- 1.刪除緩存
- 2.寫數(shù)據(jù)庫
- 3.休眠
- 4.再次刪除緩存
休眠時間如何確定
- 讀數(shù)據(jù)邏輯耗時
- Redis和數(shù)據(jù)庫主從同步耗時
優(yōu)化:緩存設(shè)置過期時間,到達緩存過期時間,后面請求DB中讀取新值回填緩存
弊端:超時時間內(nèi)數(shù)據(jù)不一致,又增加寫請求的耗時
方案二:異步更新緩存(基于訂閱binlog的同步機制)
概述:MySQL binlog增加訂閱消費 + 消息隊列 + 增量數(shù)據(jù)更新Redis
步驟
- 1.MySQL產(chǎn)生更新操作,binlog消息推送至Redis,Redis根據(jù)binlog記錄更新
- 2.可結(jié)合阿里開源框架canal
數(shù)據(jù)一致性解決方案.png