Redis事務控制

2022-02-03 12:56:50 字數 1402 閱讀 2511

命令名

作用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 業務分析 基於特定條件的事務執行 ...