千鋒教育2023版Java面試寶典Java面試200題(含美團、字節(jié)、阿里大廠真

Redis怎么保證緩存和數(shù)據(jù)庫數(shù)據(jù)的一致性?
1、淘汰緩存
數(shù)據(jù)如果為較為復(fù)雜的數(shù)據(jù)時,進行緩存的更新操作就會變得異常復(fù)雜,因此一般推薦選擇淘汰緩存,而不是更新緩存。|I
2、選擇先淘汰緩存,再更新數(shù)據(jù)庫
假如先更新數(shù)據(jù)庫,再淘汰緩存,如果淘汰緩存失敗,那么后面的請求都會得到臟數(shù)據(jù),直至緩存過期。
假如先淘汰緩存再更新數(shù)據(jù)庫,如果更新數(shù)據(jù)庫失敗,只會產(chǎn)生一次緩存穿透,相比較而言,后者對業(yè)務(wù)則沒有本質(zhì)上的影響。
3、延時雙刪策略
如下場景:同時有一個請求A進行更新操作,另一個請求B進行查詢操作。請求A進行寫操作,刪除緩存
請求B查詢發(fā)現(xiàn)緩存不存在請求B去數(shù)據(jù)庫查詢得到舊值請求B將舊值寫入緩存
請求A將新值寫入數(shù)據(jù)庫
次數(shù)便出現(xiàn)了數(shù)據(jù)不一致問題。采用延時雙刪策略得以解決。
4、數(shù)據(jù)庫讀寫分離的場景
兩個請求,一個請求A進行更新操作,另一個請求B進行查詢操作。·請求A進行寫操作,刪除緩存
·請求A將數(shù)據(jù)寫入數(shù)據(jù)庫了,
·請求B查詢緩存發(fā)現(xiàn),緩存沒有值1
·請求B去從庫查詢,這時,還沒有完成主從同步,因此查詢到的是舊值·請求B將舊值寫入緩存
·數(shù)據(jù)庫完成主從同步,從庫變?yōu)樾轮狄琅f采用延時雙刪策略解決此問題。
標簽: