分布式資料庫與快取雙寫一致性方案解疑

2021-08-20 11:34:05 字數 704 閱讀 5993

在網際網路領域,快取由於其高併發和高效能的特性,已經在專案中被廣泛使用。在讀取快取方面,大家沒什麼疑問,都是按照下圖的流程來進行業務操作。

本文將由以下三個部分組成:

對每種策略進行缺點分析

針對缺點給出改進方案

先做乙個說明,從理論上來說,給快取設定過期時間,是保證最終一致性的解決方案。這種方案下,我們可以對存入快取的資料設定過期時間,所有的寫操作以資料庫為準,對快取操作只是盡最大努力即可。也就是說如果資料庫寫成功,快取更新失敗,那麼只要到達過期時間,則後面的讀請求自然會從資料庫中讀取新值然後回填快取。因此,接下來討論的思路不依賴於給快取設定過期時間這個方案。

在這裡,我們討論三種更新策略:

先刪除快取,再更新資料庫;

先更新資料庫,再刪除快取。

應該沒有人會問我,為什麼沒有先更新快取,再更新資料庫這種策略吧?

一、先更新資料庫,再更新快取

這套方案,大家是普遍反對的。為什麼呢?有如下兩點原因。

同時有請求a和請求b進行更新操作,那麼會出現

執行緒b更新了資料庫;

執行緒b更新了快取;

執行緒a更新了快取。

這就出現請求a更新快取應該比請求b更新快取早才對,但是因為網路等原因,b卻比a更早更新了快取。這就導致了髒資料,因此不考慮。

分布式資料庫與快取雙寫一致性方案解疑

在網際網路領域,快取由於其高併發和高效能的特性,已經在專案中被廣泛使用。在讀取快取方面,大家沒什麼疑問,都是按照下圖的流程來進行業務操作。對每種策略進行缺點分析 針對缺點給出改進方案 先做乙個說明,從理論上來說,給快取設定過期時間,是保證最終一致性的解決方案。這種方案下,我們可以對存入快取的資料設定...

快取 分布式資料庫與快取一致性問題

快取的讀取,比較常規 但是在更新快取方面比較有爭議,具體有以下幾種方式 先更新db,再更新cache 先更新db,再刪除cache 先刪除cache,再更新db 執行緒安全 資料不一致 同時請求a和請求b進行更新操作,那麼 a更新了資料庫 b更新了資料庫 b更新了快取 a更新了快取 這就出現請求a更...

《分布式之資料庫快取雙寫一致性方案解析》

但是在更新快取方面,對於更新完資料庫,是更新快取呢,還是刪除快取。又或者是先刪除快取,再更新資料庫,其實大家存在很大的爭議。目前沒有一篇全面的部落格,對這幾種方案進行解析。於是博主戰戰兢兢,頂著被大家噴的風險,寫了這篇文章。本文由以下三個部分組成 1 講解快取更新策略 2 對每種策略進行缺點分析 3...