Redis事务

 

分类:数据库redis
标签:事务redisredis操作

2020-04-21 10:13:35.0 阅读原文

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"


分类:数据库redis
标签:事务redisredis操作

原文链接: Redis事务 2020-04-21 10:13:35.0