1. 程式人生 > >阿裏JAVA面試題剖析:redis 的並發競爭問題是什麽?如何解決這個問題?

阿裏JAVA面試題剖析:redis 的並發競爭問題是什麽?如何解決這個問題?

並發 ron 判斷 ffffff blog 技術分享 sha ESS alt

面試原題

redis 的並發競爭問題是什麽?如何解決這個問題?了解 redis 事務的 CAS 方案嗎?

面試官心理分析

這個也是線上非常常見的一個問題,就是多客戶端同時並發寫一個 key,可能本來應該先到的數據後到了,導致數據版本錯了;或者是多客戶端同時獲取一個 key,修改值之後再寫回去,只要順序錯了,數據就錯了

而且 redis 自己就有天然解決這個問題的 CAS 類的樂觀鎖方案。

面試題剖析

某個時刻,多個系統實例都去更新某個 key。可以基於 zookeeper 實現分布式鎖。每個系統通過 zookeeper 獲取分布式鎖,確保同一時間,只能有一個系統實例在操作某個 key,別人都不允許讀和寫。

技術分享圖片

你要寫入緩存的數據,都是從 mysql 裏查出來的,都得寫入 mysql 中,寫入 mysql 中的時候必須保存一個時間戳,從 mysql 查出來的時候,時間戳也查出來。

每次要寫之前,先判斷一下當前這個 value 的時間戳是否比緩存裏的 value 的時間戳要新。如果是的話,那麽可以寫,否則,就不能用舊的數據覆蓋新的數據。

阿裏JAVA面試題剖析:redis 的並發競爭問題是什麽?如何解決這個問題?