悲觀所 樂觀鎖

操作員A
操作員B
(1)、操作員A此時將用戶信息讀出(此時version=1),並準備從其帳戶餘額中扣除$50$100-$50
(2)、在操作員A操作的過程中,操作員B也讀入此用戶信息(此時version=1),並準備從其帳戶餘額中扣除$20$100-$20
(3)、操作員A完成了修改工作,將數據版本號加1(此時version=2),連同帳戶扣除後餘額(balance=$50),提交至數據庫更新,此時由於提交數據版本大於數據庫記錄當前版本,數據被更新,數據庫記錄version更新爲2


(4)、操作員B完成了操作,也將版本號加1version=2)並試圖向數據庫提交數據(balance=$80),但此時比對數據庫記錄版本時發現,操作員B提交的數據版本號爲2,數據庫記錄當前版本也爲2,不滿足“提交版本必須大於記錄當前版本才能執行更新”的樂觀鎖策略,因此,操作員B的提交被駁回

123

Session 1
Session 2
(1)1
redis 127.0.0.1:6379> get age
"10"
redis 127.0.0.1:6379> watch age
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379>


(2)2
redis 127.0.0.1:6379> set age 30
OK
redis 127.0.0.1:6379> get age
"30"
redis 127.0.0.1:6379>
(3)3
redis 127.0.0.1:6379> set age 20
QUEUED
redis 127.0.0.1:6379> exec
(nil)
redis 127.0.0.1:6379> get age
"30"
redis 127.0.0.1:6379>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章