Redis中的延遲雙刪
什么是延遲雙刪?
做法:先刪除redis,再更新數(shù)據(jù)庫(kù),延遲N秒后再刪除一次redis。
延遲雙刪策略是分布式系統(tǒng)中數(shù)據(jù)庫(kù)存儲(chǔ)和緩存數(shù)據(jù)保持最終一致性的常用策略,但它不是強(qiáng)一致。
其實(shí)不管哪種方案,都避免不了Redis存在臟數(shù)據(jù)的問(wèn)題,只能減輕這個(gè)問(wèn)題,要想徹底解決,得要用到同步鎖和對(duì)應(yīng)的業(yè)務(wù)邏輯層面解決。
在更新數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),需要同步redis中緩存的數(shù)據(jù),存在兩種方法:
第一種方案
先更新數(shù)據(jù)庫(kù),再刪除redis。
存在的問(wèn)題:當(dāng)請(qǐng)求1執(zhí)行完更新數(shù)據(jù)庫(kù)操作后,還未來(lái)得及刪除redis,此時(shí)請(qǐng)求2查詢(xún)到并使用了redis中的舊數(shù)據(jù)。
第二種方案
先刪除redis,再更新數(shù)據(jù)庫(kù)。
存在的問(wèn)題:當(dāng)請(qǐng)求1執(zhí)行完刪除redis后,還未進(jìn)行更新數(shù)據(jù)庫(kù)操作,此時(shí)請(qǐng)求2查詢(xún)到了數(shù)據(jù)庫(kù)的舊數(shù)據(jù)并寫(xiě)入了redis。
所以需要先刪除redis,再更新數(shù)據(jù)庫(kù),延遲N秒后再刪除一次redis。
延時(shí)雙刪可能會(huì)導(dǎo)致的問(wèn)題?
在低并發(fā)的情況下,可以通過(guò)加鎖的方式來(lái)達(dá)成雙寫(xiě)一致性。
但是高并發(fā)的情況下,刪除緩存必然會(huì)造成緩存擊穿的問(wèn)題,其實(shí)緩存擊穿影響不大,因?yàn)槟芙鉀Q, 主要是延遲雙刪的第一次刪除可能沒(méi)什么意義。
因?yàn)樵诰彺娴谝淮蝿h除舊數(shù)據(jù)后,數(shù)據(jù)庫(kù)還沒(méi)有完成更新時(shí),請(qǐng)求到來(lái)時(shí)直接請(qǐng)求數(shù)據(jù)庫(kù),返回的還是舊數(shù)據(jù)并添加到了緩存中,相當(dāng)于又回到了緩存第一次刪除之前的狀態(tài),都是緩存的舊數(shù)據(jù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis實(shí)現(xiàn)短信登錄的企業(yè)實(shí)戰(zhàn)
本文主要介紹了Redis實(shí)現(xiàn)短信登錄的企業(yè)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07使用寶塔在服務(wù)器上配置Redis的詳細(xì)圖文教程
這篇文章主要給大家介紹了關(guān)于使用寶塔在服務(wù)器上配置Redis的相關(guān)資料,包括下載和安裝Redis,開(kāi)放端口,修改配置文件以允許遠(yuǎn)程訪(fǎng)問(wèn)和設(shè)置密碼,該過(guò)程對(duì)于理解Redis在項(xiàng)目部署中的配置提供了實(shí)用指導(dǎo),需要的朋友可以參考下2024-11-11Redis中5種BitMap應(yīng)用場(chǎng)景及實(shí)現(xiàn)介紹
Redis BitMap是一種高效的位操作數(shù)據(jù)結(jié)構(gòu),這種結(jié)構(gòu)在處理海量數(shù)據(jù)的布爾型狀態(tài)時(shí)尤其高效,下面小編就來(lái)和大家簡(jiǎn)單介紹一下5種它的應(yīng)用場(chǎng)景及實(shí)現(xiàn)方法吧2025-04-04