解決快取與資料庫一致性問題
阿新 • • 發佈:2018-12-22
1、引用快取的好處
1)提高效能;2)減緩資料庫壓力;3)提高系統併發處理能力
2、引用快取的問題
1)處理邏輯變得複雜;2)使用不當,容易引起快取和資料庫資料不一致的問題
3、資料不一致的原因
快取操作與資料庫操作不是原子操作,當一方操作成功、另一方操作失敗時就會造成資料不一致問題
4、不同情況下常用處理方法
1)簡單邏輯處理:與資料庫簡單的一次性互動,可根據資料庫/快取的操作結果,來判斷快取/資料庫是否要執行相應操作,如圖:
a、增:db-->cache:資料庫插入成功,新增到快取
b、刪:cache-->db:先刪快取,在刪資料庫
c、改:db-->cache:先改資料庫,在改快取
d、查:cache-->db-->cache:先查快取,沒有則查庫新增到快取
2)複雜邏輯處理:一個service中有多次資料庫互動,並且由於spring事務傳播性不同有時只在最外層事務提交時提交(spring預設事務傳播性)
a、增:db:只插入資料庫
b、刪:cache-->db:先刪快取,再刪資料庫
c、改:cache-->db:先刪快取,再刪資料庫
d、查:cache-->db-->cache:先查快取,沒有則查庫新增到快取
注:
1)還可以通過設定標誌位,在外層回滾快取的做法,由於該方法會使快取操作與業務操作耦合性過大,此處不做介紹;
2)如上操作cache與db的理由,未詳細解釋,如有需要可回覆評論探討;
3)該篇博文主要用於討論解決資料庫與快取不一致問題,對於高併發下造成的執行緒安全問題,後續討論。。。