1. 程式人生 > >解決快取與資料庫一致性問題

解決快取與資料庫一致性問題

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)該篇博文主要用於討論解決資料庫與快取不一致問題,對於高併發下造成的執行緒安全問題,後續討論。。。