Redis 基本命令大全 三(事務)

接上文: Redis 基本命令大全 二(list 、 set、 sorted set)

六 事務(multi、exec、watch、unwatch、discard)

multi

MULTI 命令用於標記一個事務的開始
事務中的多條命令會按照先後順序被放入一個隊列當中,最後由exec命令原子性的執行

exec

EXEC 命令用於執行所有事務塊內的命令

watch

WATCH 命令用於監視一個或多個key ,如果在執行事務之前key被其他命令改動,那麼事務將被打斷

語法

watch key1 key2 ...

unwatch

UNWATCH 命令用於取消watch對所有key的監視

discard

DISCARD 命令用於取消事務,放棄執行事務內的所有命令

語法

hset keyName field value

實例

127.0.0.1:6379[3]> MULTI
OK
127.0.0.1:6379[3]> incr num
QUEUED
127.0.0.1:6379[3]> incr num
QUEUED
127.0.0.1:6379[3]> exec  //exec 命令之後開始執行事務中的所有命令,並返回每個命令的返回值
1) (integer) 1		//這裏是執行第一個incr num命令返回的結果
2) (integer) 2		//這裏是執行第二個incr num命令返回的結果
------------------------------------------------------------------------------------
127.0.0.1:6379[3]> multi
OK
127.0.0.1:6379[3]> asdf	//在這裏我執行了一個不存在的命令,下面直接報錯了
(error) ERR unknown command `asdf`, with args beginning with:
127.0.0.1:6379[3]> incr num2
QUEUED
127.0.0.1:6379[3]> incr num2
QUEUED
127.0.0.1:6379[3]> exec	//exec命令之後返回錯誤,事務中的所有命令都不執行
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379[3]> get num2		//查看num2不存在,說明事務中的兩條incr命令也沒有執行成功
nil
------------------------------------------------------------------------------------
127.0.0.1:6379[3]> MULTI
OK
127.0.0.1:6379[3]> set num3 1.1		//在這裏我們爲num3賦值爲1.1
QUEUED
127.0.0.1:6379[3]> incr num3	//在這裏爲num3做incr命令,我們都知道,浮點數命令只能用incrByfloat這個命令來操作,所以這裏應該返回錯誤。
QUEUED						//但這裏並沒有返回錯誤,繼續放入事務隊列中了
127.0.0.1:6379[3]> incr num4
QUEUED
127.0.0.1:6379[3]> incr num4
QUEUED
127.0.0.1:6379[3]> exec	//執行事務中的命令
1) OK		//這個是執行set num3 1.1 返回的結果
2) (error) ERR value is not an integer or out of range  //這裏是執行incr num3返回的錯誤
3) (integer) 1		//這裏是執行incr num4返回的結果
4) (integer) 2		//其他命令正常返回
127.0.0.1:6379[3]> get num4		//事務結束後,num4存在並正確
"2"
------------------------------------------------------------------------------------
127.0.0.1:6379[3]> set name zhangsan
OK
127.0.0.1:6379[3]> watch name		//監聽這個name
OK
127.0.0.1:6379[3]> MULTI
OK
127.0.0.1:6379[3]> set age 15
QUEUED
127.0.0.1:6379[3]> set job dev
QUEUED
127.0.0.1:6379[3]> exec
1) OK
2) OK
------------------------------------------------------------------------------------
127.0.0.1:6379[3]> set name1 lisi
OK
127.0.0.1:6379[3]> WATCH name1
OK
127.0.0.1:6379[3]> MULTI
OK
127.0.0.1:6379[3]> set age1 20
QUEUED
127.0.0.1:6379[3]> set job1 docter
QUEUED
127.0.0.1:6379[3]> exec			//在沒有執行exec之前,在開啓一個客戶端執行 set name1 wangwu
(nil)				//事務沒有執行成功,返回nil
127.0.0.1:6379[3]> get job1		//獲取job1失敗
(nil)
------------------------------------------------------------------------------------
127.0.0.1:6379[3]> multi
OK
127.0.0.1:6379[3]> incr num5
QUEUED
127.0.0.1:6379[3]> incr num5
QUEUED
127.0.0.1:6379[3]> DISCARD		//discard 取消事務中所有命令的執行
OK
127.0.0.1:6379[3]> get num5
(nil)
------------------------------------------------------------------------------------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章