Redis 事务可以一次执行多个命令。将多个命令加入一个队列中,使用exec执行。执行过程中不会被其他命令打断,但是在命令被加入队列过程中出错,整个队列的命令都不会被执行。
Redis事务命令
命令 | 说明 |
---|---|
multi | 开启事务 |
exec | 提交(执行)事务 |
discard | 回滚(放弃)事务 |
watch | 监视一个(或多个) key ,如果在事务执行之前这个 key 被其他命令所改动,那么事务将被打断。 |
unwatch | 取消监视 |
Redis事务举例
多个命令全部执行成功:
local-redis:0> multi
"OK"
local-redis:0> set a aaa
"QUEUED"
local-redis:0> set b bbb
"QUEUED"
local-redis:0> set c ccc
"QUEUED"
local-redis:0> exec
1) "OK"
2) "OK"
3) "OK"
部分命令入队失败,则事务失败:
local-redis:0> multi
"OK"
local-redis:0> set k1 v1
"QUEUED"
local-redis:0> set k2 v2
"QUEUED"
local-redis:0> getset k3 v3
"QUEUED"
local-redis:0> getset k4
"ERR wrong number of arguments for 'getset' command"
local-redis:0> set k5 v5
"QUEUED"
local-redis:0> exec
"EXECABORT Transaction discarded because of previous errors."
部分命令执行失败,其他命令不受影响,事务部分执行成功:
local-redis:0> multi
"OK"
local-redis:0> set k1 v1
"QUEUED"
local-redis:0> set k2 v2
"QUEUED"
local-redis:0> incr k1
"QUEUED"
local-redis:0> set k3 v3
"QUEUED"
local-redis:0> exec
1) "OK"
2) "OK"
3) "ERR value is not an integer or out of range"
4) "OK"
回滚事务,命令都不会被执行:
local-redis:0> multi
"OK"
local-redis:0> set k1 aaa
"QUEUED"
local-redis:0> set k2 bbb
"QUEUED"
local-redis:0> get k1
"QUEUED"
local-redis:0> discard
"OK"
求联系方式
不错