redis 樂觀鎖(十)

2022-08-29 06:03:11 字數 1516 閱讀 2527

監視:watch

正常業務(單執行緒):

127.0.0.1:6379> set money 100  #模擬存款100元

ok127.0.0.1:6379> set moneyout 0 #模擬花費0元

ok127.0.0.1:6379> watch money #監控存款

ok127.0.0.1:6379> multi #開啟事務

ok127.0.0.1:6379> decrby money 10 #存款減10元

queued

127.0.0.1:6379> incrby moneyout 10 #花費加10元

queued

127.0.0.1:6379> exec #執行事務

1) (integer) 90

2) (integer) 10

執行緒一:

127.0.0.1:6379> set money 100 #模擬存款100元

ok127.0.0.1:6379> set moneyout 0 #模擬花費0元

ok127.0.0.1:6379> watch money #監控存款

ok127.0.0.1:6379> multi #開啟事務

ok127.0.0.1:6379> decrby money 10 #存款減10元

queued

127.0.0.1:6379> incrby moneyout 10 #花費加10元

queued

127.0.0.1:6379> exec #執行緒二修改完money再執行事務提交 執行失敗

(nil)

執行緒二:

127.0.0.1:6379> get money

"100"

127.0.0.1:6379> set money 900 #對存款重新設定值

ok127.0.0.1:6379> get money

"900"

解決異常業務(多執行緒):先解鎖(unwatch) 再加鎖(watch)

127.0.0.1:6379> unwatch #如果事務提交失敗 先解鎖

ok127.0.0.1:6379> get money

"900"

127.0.0.1:6379> watch money #再加鎖 獲取最新值

ok127.0.0.1:6379> multi

ok127.0.0.1:6379> decrby money 100

queued

127.0.0.1:6379> incrby moneyout 100

queued

127.0.0.1:6379> exec #執行事務成功

1) (integer) 800

2) (integer) 100

Redis實現樂觀鎖

悲觀鎖 樂觀鎖 127.0.0.1 6379 set money 100 ok127.0.0.1 6379 set out 0 ok127.0.0.1 6379 watch money 監事 money 物件 ok127.0.0.1 6379 multi 事務正常結束,資料期間沒有發生變動,這個時候...

redis實現樂觀鎖

redis測試監控 正常執行成功!127.0.0.1 6379 set money 100 ok127.0.0.1 6379 set out 0 ok127.0.0.1 6379 watch money 監視money物件 ok127.0.0.1 6379 multi ok127.0.0.1 637...

Redis 事務(悲觀鎖 樂觀鎖)

1 定義 redis事務是乙個單獨的隔離操作 事務中所有的命令都會被序列化 按照順序執行 事務在執行過程中不會被其他客戶端傳送來的命令請求打斷 2 作用 串聯多個命令防止別的命令插隊 multi 輸入開始命令 exec 執行命令 discard 放棄組隊 刪除掉 3 注意事項 1 multi 命令不...