一、涉及到的操作
緩存:讀、寫、更新、刪除,這些操作可能失敗
數據庫:讀、寫、更新、刪除,這些操作可能失敗
二、正常流程
1. 讀數據,先讀緩存,命中返回數據;未命中讀數據庫,返回數據,寫緩存;讀數據不存在不一致問題
2. 寫數據庫,對緩存不做處理
3. 更新數據庫數據,如果數據不在緩存中,不作處理;如果數據在緩存中,刪除而不是更新緩存
a. 有些緩存中的數據,是經過處理后的數據,如果更新會消耗計算資源
b. 如果頻繁更新,卻沒有讀取,就會浪費計算時間和內存空間
4. 刪除數據庫數據,如果數據不在緩存中,不作處理;如果數據在緩存中,刪除緩存
三、初級的數據不一致問題
更新數據庫數據的時候,如果更新數據庫數據成功,刪除緩存數據失敗,則數據不一致
四、解決方法:更新數據庫數據時,先刪除緩存,可以保證一致性
a. 如果刪除緩存失敗,則更新失敗
b. 如果刪除緩存成功,但是更新數據庫失敗,則緩存中沒有數據,數據庫是舊數據
五、復雜的數據不一致的問題
在刪除緩存后,更新數據庫還未成功,此時有請求讀取數據庫舊數據,並把舊數據寫入了緩存,然后更新數據庫成功
六、解決方法
設置緩存過期時間,保證最終數據一致性