redis快取如何同步資料庫

2021-10-09 15:46:10 字數 632 閱讀 4620

redis快取如何同步資料庫

redis-mysql模式

讀:服務程式先從快取中讀取資料,如果命中,則將資料讀出。如果未命中,則在資料庫中讀取資料,

然後將資料寫入到快取中去。

更新資料:常見的模式是先到資料庫中寫入,然後刪除快取中的資料。

產生的不一致

讀:只是讀資料一般不會有不一致出現。

更新:(1) 資料庫中存在資料,快取中不存在資料

(2) 快取和資料庫中都有資料,兩者資料不相等造成不一致(產生原因,可能是更新資料庫資料後,對於快取中的資料

刪除失敗,或者是在a程序更新資料庫還未來得及刪除快取時,b程序讀取到快取中的髒資料)

(3) 快取中存在資料,資料庫中不存在資料

解決方法:

對於第一種不一致,只需要將資料庫中的資料寫入到快取中即可消除不一致。後面兩種的不一致究其原因是資料庫更新了,

而快取刪除失敗。所以採用以下解決方案:

(1) 對於刪除快取操作進行重試。

(2) 定期的對快取中的資料進行全量的更新,然後進行全量的載入。

(3) 對於所有的快取設定乙個失效期(失效期越短資料一致性越高,但是會頻繁的查詢資料庫,所以要具體環境進行具體的選擇)

參考部落格:

redis快取和mysql資料庫同步

穿透 頻繁查詢乙個不存在的資料,由於快取不命中,每次都要查詢持久層。從而失去快取的意義。解決辦法 持久層查詢不到就快取空結果,查詢時先判斷快取中是否exists key 如果有直接返回空,沒有則查詢後返回,注意insert時需清除查詢的key,否則即便db中有值也查詢不到 當然也可以設定空快取的過期...

Redis更新快取同步資料庫的理解

問題 當資料庫有資料更新時,怎樣保證redis快取中的資料與資料庫資料一致?redis更新的正確方法 原文 快取更新的套路 看到好些人在寫更新快取資料 時,先刪除快取,然後再更新資料庫,而後續的操作會把資料再裝載的快取中。然而,這個是邏輯是錯誤的。試想,兩個併發操作,乙個是更新操作,另乙個是查詢操作...

redis資料庫快取

使用redis作為快取,資料還需要存入資料庫中嗎?我的答案是 1redis只是快取,不是資料庫如mysql,所以redis中有的資料庫,mysql中一定有。2使用者請求先去請求redis,如果沒有,再去資料庫中去讀取。3redis中快取一些請求量比較大的資料 這些快取資料,mysql中一定也是有的 ...