事务提交成功

1.[判断命令是否正确]在事务中执行命令,如果返回不是的queue, 那么肯定会失败,在代码中使用的时候,不会返回 QUEUE,命令的格式和数据类型应该自己注意
2.事务结束(discard,exec),会导致watch观察所有的key失效。
127.0.0.1:6379> keys *
1) "sortedRange"
127.0.0.1:6379> zrange sortedRange 0 -1 withscores
1) "youyi"
2) "48"
3) "xiaojiahuo"
4) "200"
#观察指定的key,可以是一个或者多个
127.0.0.1:6379> watch sortedRange
OK
#开启事务
127.0.0.1:6379> multi
OK
127.0.0.1:6379> zincrby sortedRange -2 youyi
QUEUED
#提交事务成功之后,watch会失效。
127.0.0.1:6379> exec
1) "46"

事务提交失败

127.0.0.1:6379> keys *
1) "sortedRange"
127.0.0.1:6379> zrange sortedRange 0 -1 withscores
1) "youyi"
2) "46"
3) "xiaojiahuo"
4) "200"
127.0.0.1:6379> watch sortedRange
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> zincrby sortedRange -2 youyi
QUEUED
#返回nil,事务提交失败,因为在事务提交之后,我们观察的key,被其它客服端修改了,所以提交也就失败了。
127.0.0.1:6379> exec
(nil)
---------------------------------
#redis的事务的特点,命令格式正确,但是数据类型不正确,并不会导致整个事务都失败,而是只会错误的失败,其它的都会成功
127.0.0.1:6379> keys *
1) "sortedRange"
127.0.0.1:6379> zrange sortedRange 0 -1 withscores
1) "youyi"
2) "54"
3) "xiaojiahuo"
4) "200"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> zincrby sortedRange asf youyi
QUEUED
127.0.0.1:6379> zincrby sortedRange -1 youyi
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not a valid float
2) "53"
----------------------------------------------------
#redis的事务的特点,命令格式不正确,会报错,虽然不影响事务的状态,可以继续写入命令,但是整个事务已经失败了,所以在事务状态中,都要判断执行命令之后,返回是否为QUEUE,保证命令格式正确。
127.0.0.1:6379> keys *
1) "sortedRange"
127.0.0.1:6379> zrange sortedRange 0 -1 withscores
1) "youyi"
2) "53"
3) "xiaojiahuo"
4) "200"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> zincrbys sortedRange  youyi
(error) ERR unknown command 'zincrbys'
127.0.0.1:6379> zincrby sortedRange 23 youyi
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.

results matching ""

    No results matching ""