關於redis的幾件小事(九)redis的併發競爭問題

1.什麼是併發競爭

就是多客戶端同時併發寫一個key,可能原本應該先到的數據後到了,致使數據版本錯了。或者是多客戶端同時獲取一個key,修改值以後再寫回去,只要順序錯了,數據就錯了。數據庫

2.怎麼解決

採用分佈式鎖+數據修改的時間戳 方案來解決。緩存

①想要向緩存中寫入數據時,必需要得到分佈式鎖,只有得到鎖了才能夠去進行緩存數據的寫入,寫入結束釋放鎖。就能夠保證同時只有一個客戶端去寫緩存。併發

②但是並不能保證每一個客戶端獲取鎖的順序。可是咱們要寫入緩存的數據都是從數據庫查詢出來的,數據庫都是有這種數據的建立時間的,因此能夠在更新以前,先去對比本身的這條數據的時間和緩存中數據的時間,誰更新,若是本身更新則寫入覆蓋,不然直接放棄本次操做。分佈式

這樣就能夠保證併發操做時的數據順序問題。 3d

解決方案示意圖
相關文章
相關標籤/搜索