如何保證緩存與數據庫的雙寫一致性


一、涉及到的操作

緩存:讀、寫、更新、刪除,這些操作可能失敗

數據庫:讀、寫、更新、刪除,這些操作可能失敗

 

二、正常流程

1. 讀數據,先讀緩存,命中返回數據;未命中讀數據庫,返回數據,寫緩存;讀數據不存在不一致問題

2. 寫數據庫,對緩存不做處理

3. 更新數據庫數據,如果數據不在緩存中,不作處理;如果數據在緩存中,刪除而不是更新緩存

a. 有些緩存中的數據,是經過處理后的數據,如果更新會消耗計算資源

b. 如果頻繁更新,卻沒有讀取,就會浪費計算時間和內存空間

4. 刪除數據庫數據,如果數據不在緩存中,不作處理;如果數據在緩存中,刪除緩存

 

三、初級的數據不一致問題

更新數據庫數據的時候,如果更新數據庫數據成功,刪除緩存數據失敗,則數據不一致

 

四、解決方法:更新數據庫數據時,先刪除緩存,可以保證一致性

a. 如果刪除緩存失敗,則更新失敗

b. 如果刪除緩存成功,但是更新數據庫失敗,則緩存中沒有數據,數據庫是舊數據

 

五、復雜的數據不一致的問題

在刪除緩存后,更新數據庫還未成功,此時有請求讀取數據庫舊數據,並把舊數據寫入了緩存,然后更新數據庫成功

 

六、解決方法

設置緩存過期時間,保證最終數據一致性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM