緩存和數據庫不一致出現的原因及其解決


cache與db不一致的原因,讀與寫出現並發。

理論上,給cache設置過期時間,是保證最終一致性到解決方案。這種方案下,寫操作以數據庫為准。更新cache失敗,只要到了過期時間,后面的讀請求會從數據庫中讀取新值存入cache。不過,實際開發中只設過期時間不足以滿足需求,出現3種策略。

  • 先更新DB,再更新cache
  • 先更新DB,再刪除cache
  • 先刪cache,再更新DB 

對於第一種策略,開發中遇到比較少,原因如下:

  1. 如果寫比讀多,讀取數據跟不上cache的頻繁更新,浪費性能
  2. 如果DB的值需要經過一系列計算寫入cache,每次更新DB,都要計算再寫入cache,浪費性能

后面2種策略,開發中體現以下幾個場景:

  1. 先更新DB,再刪除cache,刪除cache失敗
  2. 當刪除完cache的時候,這時去更新DB,但還沒有更新完,另外一個請求來查詢數據,發現cache里沒有,就去DB里查,再把DB舊數據存入緩存中

解決方案:

場景1

  1. 先刪除cache,再更新DB,如果刪除cache失敗,就不更新DB。重試機制,刪除cache。

場景2

  1. 利用消息隊列,更新cache

DB產生新的增刪改操作放入隊列中,操作執行完發消息給cache,cache數據進行更新。如果中途出現查詢,同步等待cache更新完成。

 

詳細資料可以參考:https://www.cnblogs.com/rjzheng/p/9041659.html

 

通常做法:

寫數據只寫DB

更新數據,先更新DB;讀數據,先讀cache

cache存熱點數據


免責聲明!

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



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