命令名
作用multi
表示開始收集命令,後面所有命令都不是馬上執行,而是加入到乙個佇列中。
exec
執行multi後面命令佇列中的所有命令。
discard
放棄執行佇列中的命令。
watch
「觀察」、「監控」乙個key,在當前佇列外的其他命令操作這個key時,放棄執行自己佇列的命令
unwatch
放棄監控乙個key
我們先測試一下
multi
set number 100
incr number
exec
執行效果如下所示:
當我們執行中間出錯時,整個事務都會失敗而且回滾。
這裡如果我們之前學過資料庫的話,應該覺得很正常
但是當我們執行以下命令時
multi
set number 1000
incr number
incr number
incriby number aaa
exec
執行結果如下
我們會發現整個事務並沒有回滾
對於此官方解釋了:
因我我們需要加強對生產環境中的錯誤異常處理
我們先來執行以下**
set num 100
get num
watch num
multi
incr num
incr num
get num
然後我們新開乙個客戶端,設定了一下num的值
然後在剛才的介面執行exec
這時候我們會發現命令執行失敗了,整個事務回滾了。
這就是乙個樂觀鎖的體現,
簡而言之就是、如果別人在我的佇列命令執行之前,修改了我的資料,那我就直接放棄了。
樂觀鎖和悲觀鎖需要依據具體的實現進行使用
樂觀鎖redis 內只有樂觀鎖,並無悲觀鎖,因為redis對效能的要求很高。
Redis 樂觀鎖控制事務
redis對事務的支援比較簡單。redis只能保證乙個客戶端發起的事務命令可以執行,中間不會插入其他事務。因為redis是單執行緒的,所以做到上面這點很容易。一般redis接受到客戶端的命令後會立即執行,但是如果客戶端發起multi命令,redis不會立即執行,而是讓當前連線進入事務上下文,把命令放...
Redis樂觀鎖控制事務
redis對事務的支援比較簡單。redis只能保證乙個客戶端發起的事務命令可以執行,中間不會插入其他事務。但 redis集群不支援事務。因為redis是單執行緒的,所以做到上面這點很容易。一般redis接受到客戶端的命令後會立即執行,但是如果客戶端發起multi命令,redis不會立即執行,而是讓當...
Redis事務 事務鎖
一旦成功所有的成功,乙個失敗,所有一些列連續動作都失敗 事務的基本操作 注意 加入事務的命令暫時到任務佇列中,並沒有立即執行,只有執行exec命令才開始執行事務定義過程中發現問題,怎麼辦?discard 事務的工作流程 事務的注意事項 手動進行事務回滾 業務場景1 業務分析 基於特定條件的事務執行 ...