關(guān)于redis的幾件小事(九)redis的并發(fā)競(jìng)爭問題

1.什么是并發(fā)競(jìng)爭

就是多客戶端同時(shí)并發(fā)寫一個(gè)key,可能本來應(yīng)該先到的數(shù)據(jù)后到了,導(dǎo)致數(shù)據(jù)版本錯(cuò)了?;蛘呤嵌嗫蛻舳送瑫r(shí)獲取一個(gè)key,修改值之后再寫回去,只要順序錯(cuò)了,數(shù)據(jù)就錯(cuò)了。

2.怎么解決

采用分布式鎖+數(shù)據(jù)修改的時(shí)間戳 方案來解決。

①想要向緩存中寫入數(shù)據(jù)時(shí),必須要獲得分布式鎖,只有獲得鎖了才可以去進(jìn)行緩存數(shù)據(jù)的寫入,寫入結(jié)束釋放鎖。就可以保證同時(shí)只有一個(gè)客戶端去寫緩存。

②可是并不能保證每個(gè)客戶端獲取鎖的順序。但是我們要寫入緩存的數(shù)據(jù)都是從數(shù)據(jù)庫查詢出來的,數(shù)據(jù)庫都是有這種數(shù)據(jù)的創(chuàng)建時(shí)間的,所以可以在更新之前,先去對(duì)比自己的這條數(shù)據(jù)的時(shí)間和緩存中數(shù)據(jù)的時(shí)間,誰更新,如果自己更新則寫入覆蓋,否則直接放棄本次操作。

這樣就可以保證并發(fā)操作時(shí)的數(shù)據(jù)順序問題。

解決方案示意圖.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容