起因
先刪除redis 后操作數(shù)據(jù)庫
先刪除redis之后立宜,還沒有修改數(shù)據(jù)庫冒萄。另外一個進(jìn)程過來之后,查看redis中沒有值橙数,于是讀取數(shù)據(jù)庫中老的值尊流,寫到緩存中去。這個時(shí)候數(shù)據(jù)庫就和緩存不一致了灯帮。
同樣道理崖技,先寫數(shù)據(jù)庫,刪除緩存钟哥。寫入之后迎献,宕機(jī)了,導(dǎo)致刪除失敗瞪醋。重啟之后導(dǎo)致數(shù)據(jù)庫和緩存數(shù)據(jù)不一致忿晕。
因?yàn)閷懞妥x是并發(fā)的,沒法保證順序,就會出現(xiàn)緩存和數(shù)據(jù)庫的數(shù)據(jù)不一致的問題银受。
如何解決践盼?
合理設(shè)置過期時(shí)間鸦采,保證最終一致性
根據(jù)業(yè)務(wù),合理設(shè)置時(shí)間咕幻。業(yè)務(wù)能夠承受多長時(shí)間不一致的場景渔伯。保證最終一致性即可。
采用雙刪策略
刪除redis 寫入數(shù)據(jù)庫 刪除redis (多進(jìn)行一步操作肄程,即可解決)
異步更新緩存(基于訂閱binlog的同步機(jī)制)
增量+全量
一個是全量(將全部數(shù)據(jù)一次寫入到redis)
一個是增量(實(shí)時(shí)更新)