redis 的併發競爭問題是什麼?如何解決這個問題?瞭解 redis 事務的 CAS 方案嗎?mysql
這個也是線上很是常見的一個問題,就是多客戶端同時併發寫一個 key,可能原本應該先到的數據後到了,致使數據版本錯了;或者是多客戶端同時獲取一個 key,修改值以後再寫回去,只要順序錯了,數據就錯了。面試
並且 redis 本身就有自然解決這個問題的 CAS 類的樂觀鎖方案。redis
某個時刻,多個系統實例都去更新某個 key。能夠基於 zookeeper 實現分佈式鎖。每一個系統經過 zookeeper 獲取分佈式鎖,確保同一時間,只能有一個系統實例在操做某個 key,別人都不容許讀和寫。sql
你要寫入緩存的數據,都是從 mysql 裏查出來的,都得寫入 mysql 中,寫入 mysql 中的時候必須保存一個時間戳,從 mysql 查出來的時候,時間戳也查出來。緩存
每次要寫以前,先判斷一下當前這個 value 的時間戳是否比緩存裏的 value 的時間戳要新。若是是的話,那麼能夠寫,不然,就不能用舊的數據覆蓋新的數據。併發