發(fā)生緩存數(shù)據(jù)庫(kù)雙寫(xiě)不一致原因:
有多個(gè)線程并發(fā)情況下同時(shí)對(duì)數(shù)據(jù)庫(kù)寫(xiě)操作并更新緩存

Snipaste_2021-02-28_22-56-51.png
解決方法方法:
1.更新的線程做更新時(shí)做刪除操作,查詢的線程查詢緩存為空就去查數(shù)據(jù)庫(kù)在更新緩存

Snipaste_2021-02-28_22-57-49.png
這種情況還是可能會(huì)發(fā)生更新緩存時(shí)導(dǎo)致緩存數(shù)據(jù)庫(kù)不一致的可能,概率很小,如果一定要要求緩存與數(shù)據(jù)庫(kù)的強(qiáng)一致性,那么就還需要更多的解決辦法比如:
1.延遲雙刪:刪緩存 -> 操作數(shù)據(jù)庫(kù) -> 延時(shí)再刪一次
2.加讀寫(xiě)鎖:讀多寫(xiě)少的情況才使用,讀多寫(xiě)多效率會(huì)很低
3.加鎖:效率最低,相當(dāng)于把所有并行的操作變成串行
4.內(nèi)存隊(duì)列:實(shí)現(xiàn)太復(fù)雜,成本很高
5.使用阿里的canal中間件:需要單獨(dú)部署,學(xué)習(xí)成本高