Redis-10Redis的事務回滾
阿新 • • 發佈:2018-12-12
概述
對於 Redis 而言,不單單需要注意其事務處理的過程,其回滾的能力也和資料庫不太一樣,這也是需要特別注意的一個問題一Redis 事務遇到的命令格式正確而資料型別不符合 ,如下所示。
場景一: 命令格正確,資料型別錯誤
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET key1 value1
QUEUED
127.0.0.1:6379> SET key2 value2
QUEUED
127.0.0.1:6379> INCR key1
QUEUED
127.0.0.1:6379> DEL key2
QUEUED
127.0 .0.1:6379> EXEC
1) OK
2) OK
3) (error) ERR value is not an integer or out of range
4) (integer) 1
127.0.0.1:6379> GET key1
"value1"
127.0.0.1:6379> GET key2
(nil)
127.0.0.1:6379>
我們將 key1 設定為字串,而使用命令 incr 對其自增,但是命令只會進入事務佇列,而沒有被執行,所以它不會有任何的錯誤發生,而是等待 exec 命令的執行。
當 exec 命令執行後,之前進入佇列的命令就依次執行,當遇到 incr 時發生命令操作的資料型別錯誤,所以顯示出了錯誤,而其之前和之後的命令都會被正常執行.
場景二:命令格式錯誤
注意,這裡命令格式是正確的,問題在於資料型別,對於命令格式是錯誤的卻是另外一種情形 如下所示
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set key1 value1
QUEUED
127.0.0.1:6379> incr
(error) ERR wrong number of arguments for 'incr' command
127.0.0.1:6379> set key2 value2
QUEUED
127.0.0.1:6379> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> GET key1
(nil)
127.0.0.1:6379> GET key2
(nil)
127.0.0.1:6379>