緩存更新是指在數(shù)據(jù)發(fā)生變化時(shí),保持緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性的問(wèn)題。如果緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù)不一致,會(huì)導(dǎo)致用戶(hù)看到過(guò)期或者錯(cuò)誤的數(shù)據(jù),影響業(yè)務(wù)邏輯和用戶(hù)體驗(yàn)。
為了實(shí)現(xiàn)緩存更新,我們可以采用以下四種方式:
Cache Aside策略:應(yīng)用程序直接與數(shù)據(jù)庫(kù)和緩存交互,并負(fù)責(zé)維護(hù)緩存的一致性
查詢(xún):先查詢(xún)緩存,如果緩存中沒(méi)有,則查詢(xún)數(shù)據(jù)庫(kù),并將結(jié)果寫(xiě)入緩存
更新:先更新數(shù)據(jù)庫(kù),然后刪除緩存或者更新緩存Read/Write Through策略:應(yīng)用程序只和緩存交互,而是使用緩存與數(shù)據(jù)庫(kù)交互
查詢(xún):先查詢(xún)緩存,如果緩存中沒(méi)有,則緩存從數(shù)據(jù)庫(kù)中加載數(shù)據(jù),并寫(xiě)入緩存
更新:先更新緩存,再由緩存同步更新數(shù)據(jù)庫(kù)Write Behind 策略:應(yīng)用程序只和緩存交互。當(dāng)有數(shù)據(jù)更新時(shí),只更新緩存,不直接更新數(shù)據(jù)庫(kù),改為異步的方式更新數(shù)據(jù)庫(kù)Refresh-Ahead策略:應(yīng)用程序只和緩存交互,由后臺(tái)服務(wù)與數(shù)據(jù)庫(kù)交互
查詢(xún):只查詢(xún)緩存
更新:由后臺(tái)服務(wù)自動(dòng)從數(shù)據(jù)庫(kù)中查詢(xún)最新的數(shù)據(jù),并將數(shù)據(jù)寫(xiě)入緩存中,不同于以上三種,應(yīng)用程序無(wú)需等待數(shù)據(jù)的刷新,也無(wú)需自己去觸發(fā)數(shù)據(jù)的刷新,而是后臺(tái)服務(wù)來(lái)完成這些操作