監視: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 命令不...