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