1. 程式人生 > 實用技巧 >redis學習之redis事務

redis學習之redis事務

redis事務

redis的事務可以一次執行多個命令,本質是一組命令的集合。一個事務中所有的命令都會被序列化,按順序序列執行且不會被其它命令插入。redis的事務分為3個階段,分別是開始事務、命令入隊、執行事務。

在這裡插入圖片描述

redis事務命令

multi:標記一個事務塊的開始;
exec:執行事務塊內的所有命令;
discard:取消事務,放棄執行事務內的所有命令;

redis事務如果在執行exec命令之前出現錯誤,伺服器會對入隊失敗的命令進行記錄,並在客戶端呼叫exec命令執行事務的時候,拒絕執行並自動放棄這個事務。如果是在執行exec命令之後出現的錯誤,redis不會進行處理,事務會繼續執行不會回滾,只有發生錯誤的命令不會執行成功,其它命令都會執行成功。

下面給出一個例子:
正常情況下,應該是這樣的
在這裡插入圖片描述
如果在執行exec前出現了錯誤,可以看到redis拒絕執行這個事務。
在這裡插入圖片描述
如果在執行exec命令之後發生了錯誤,可以看到redis執行了事務,但是錯誤的命令沒有執行,其它的的兩個命令正常執行了。
在這裡插入圖片描述
取消事務例子,取消事務後其中的命令不會被執行。
在這裡插入圖片描述

watch:監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷,watch命令為redis事務提供CAS行為,如果至少一個被監視的鍵在EXEC執行之前被修改了,那麼整個事務都會被取消。
unwatch:取消watch命令對所有key的監視;

watch命令舉例

在執行exec命令前,開啟另一個視窗,改變name的值,再執行exec命令,可以看到事務被取消了,獲取name的值可以看到是在另一視窗中設定的值。
在這裡插入圖片描述

在這裡插入圖片描述

參考