目錄
- 簡介
- 執行程序
- 特點
- 案例
- watch
簡介
事務(Transaction),一般是指要做的或所做的事情,在計算機術語中是指訪問并可能更新資料庫中各種資料項的一個程式執行單元(unit),
執行程序
開始事務 -> 命令入隊 -> 執行事務,
特點
① 批量操作在發送 exec 命令前被放入佇列快取,
② 收到exec命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然會被執行,
③ 在事務的執行程序中,其他客戶端提交的命令請求不會插入到事務執行命令的序列中,
案例:
-
(1)正常執行
localhost:6379> multi OK localhost:6379> set a 1111 QUEUED localhost:6379> set b 2222 QUEUED localhost:6379> set c 3333 QUEUED localhost:6379> set d 4444 QUEUED localhost:6379> exec 1) OK 2) OK 3) OK 4) OK -
(2)取消事務
localhost:6379> multi OK localhost:6379> set e 55555 QUEUED localhost:6379> set f 66666 QUEUED localhost:6379> discard OK localhost:6379> exec (error) ERR EXEC without MULTI -
(3)編譯型錯誤

最后執行exec命令之后,會執行佇列中的命令,佇列中命令有失敗的,所以最后整個命令都執行失敗,
編譯型例外代碼有問題,命令有錯,事務中所有的命令都不會被執行, -
(4)運行時錯誤
localhost:6379> set a qqqq OK localhost:6379> multi OK localhost:6379> incr a QUEUED localhost:6379> set b 1111 QUEUED localhost:6379> set c 2222 QUEUED localhost:6379> set d 3333 QUEUED localhost:6379> exec 1) (error) ERR value is not an integer or out of range 2) OK 3) OK 4) OK localhost:6379> keys * 1) "a" 2) "c" 3) "b" 4) "d"如果事務佇列存在語法錯誤,那么執行命令的時候,其他命令是可以正常執行的,錯誤命令拋出例外,
watch
Watch 命令用于監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷,
- 監控
a時,a被修改//客戶端1 localhost:6379> set a 1111 OK localhost:6379> WATCH a OK localhost:6379> MULTI OK localhost:6379> set a 2222 QUEUED localhost:6379> exec (nil) //客戶端2 127.0.0.1:6379> set a 567 OK - 正常
watchlocalhost:6379> set a 1111 OK localhost:6379> WATCH a OK localhost:6379> MULTI OK localhost:6379> set b 222 QUEUED localhost:6379> set c 333 QUEUED localhost:6379> set d 444 QUEUED localhost:6379> exec 1) OK 2) OK 3) OK localhost:6379> keys * 1) "a" 2) "c" 3) "b" 4) "d"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/254755.html
標籤:其他
上一篇:如何判斷redis變慢了
