
當(dāng)我們更新數(shù)據(jù)庫的時(shí)候需要保持?jǐn)?shù)據(jù)可的數(shù)據(jù)和緩存中的數(shù)據(jù)保持一致在業(yè)務(wù)背景的不同所對應(yīng)的就有兩種解決方式1.必須保證強(qiáng)一致性的業(yè)務(wù)解決方案i延遲雙刪先去刪除緩存再去更新數(shù)據(jù)庫等待一段時(shí)間后再去刪除緩存刪除兩次緩存的原因由于我們的線程是交替執(zhí)行的有可能再緩存中還存在數(shù)據(jù)庫已經(jīng)更新之前的臟數(shù)據(jù)所以我們要再刪一遍緩存。延時(shí)刪除的原因數(shù)據(jù)庫一般是主從模式讀寫分離的所以我們要等待一會(huì)讓主節(jié)點(diǎn)把數(shù)據(jù)同步到從節(jié)點(diǎn)之后再進(jìn)行刪除當(dāng)然在延遲雙刪的過程中依然不能保證數(shù)據(jù)的強(qiáng)一致性ii采用讀寫鎖進(jìn)行控制由于我們存入緩存中的數(shù)據(jù)一般都是讀多寫少我們可以采用Redisson中的讀寫鎖來進(jìn)行完成讀鎖只允許多個(gè)線程進(jìn)行讀操作無法進(jìn)行寫操作寫鎖則是只能讓一個(gè)線程做寫操作這樣我們就實(shí)現(xiàn)的數(shù)據(jù)的強(qiáng)一致性2.可以允許延遲一致的業(yè)務(wù)在更改數(shù)據(jù)庫之后通過MQ發(fā)送異步請求完成緩存的更新