怎麼保證快取和資料庫資料的一致性?

2022-01-29 05:35:14 字數 766 閱讀 4095

選擇淘汰快取

選擇先淘汰快取,再更新資料庫

原因:假如先更新資料庫,再淘汰快取,假如快取淘汰失敗,那麼後面的請求都會得到髒資料,直至快取過期。假如先淘汰快取再更新資料庫,如果資料庫更新失敗,只會產生一次快取miss,相比較而言,後者對業務影響更小一點。

如下場景:同時有乙個請求a進行更新操作,另乙個請求b進行查詢操作。

(1)請求a進行寫操作,刪除快取

(2)請求b查詢發現快取不存在

(3)請求b去資料庫查詢得到舊值

(4)請求b將舊值寫入快取

(5)請求a將新值寫入資料庫

次數便出現了資料不一致問題。採用延時雙刪策略得以解決

public

void

write(string key,object data)

這麼做,可以將1秒內所造成的快取髒資料,再次刪除。這個時間設定可根據俄業務場景進行乙個調節。

兩個請求,乙個請求a進行更新操作,另乙個請求b進行查詢操作。

(1)請求a進行寫操作,刪除快取

(2)請求a將資料寫入資料庫了,

(3)請求b查詢快取發現,快取沒有值

(4)請求b去從庫查詢,這時,還沒有完成主從同步,因此查詢到的是舊值

(5)請求b將舊值寫入快取

(6)資料庫完成主從同步,從庫變為新值

依舊採用延時雙刪策略解決此問題

快取與資料庫一致性之一:快取更新設計

如何保證Redis快取和資料庫的雙寫一致性?

在資料庫 快取模式下,當資料庫中的資料需要更新時,快取裡的資料怎麼處理?如何保證快取和資料庫中資料的一致性?常用的解決方案有兩種 其他渣渣的方案這裡不討論 1 先刪除快取,再更新資料庫 2 先更新資料庫,再刪除快取 下面我們就來看一下這兩種方案,看看它們是怎麼保證資料一致性的?理想的流程是這樣的 先...

快取和資料庫一致性

對應比較常用的資料,比如鑑權資料一般會放在快取中 比如 redis 這樣能夠跟快的實現讀取,所以一般讀取流程如下 目前網上有很多關於快取和資料庫怎麼保持一致性的文件,主要可以總結為如下幾點 1 先更新資料庫,在更新快取 2 先刪除快取,在更新資料庫 3 先更新資料庫,在刪除快取 下面將對著幾種機制作...

快取與資料庫一致性保證

本文主要討論這麼幾個問題 1 啥時候資料庫和快取中的資料會不一致 2 不一致優化思路 3 如何保證資料庫與快取的一致性 當資料發生變化時,先淘汰快取,再修改資料庫 這個點是大家討論的最多的。上篇文章得出這個結論的依據是,由於操作快取與運算元據庫不是原子的,非常有可能出現執行失敗。假設先寫資料庫,再淘...