Redis专题二:事务

Redis专题二:事务

事务的概念

  • 有序性:事务中所有的命令都是有序执行的
  • 原子性:要么事务中所有命令都执行,要么都不执行;
    如果EXEC命令被调用,则事务中所有命令都会执行。如果EXEC命令调用前发生错误,则事务中所有命令都不执行

事务命令

命令 解释 返回值
MULTI 事务开始的标志 OK
[redis command] 输入redis正常的命令,这些命令会加入到一个队列中,直到EXEC命令被调用,这些命令才会被执行,如SET connections 12 QUEUED
DISCARD 中止事务执行,一般写在在MULTI执行后 OK
WATCH 为事务key提供check-and-set (CAS)检查,如果在EXEC调用前WATCH 监控的keys发生变化,则会中止事务的执行,一般写在MULTI执行前 OK
EXEC 顺序执行队列中排好队的命令,如果用了WATCH且keys发生变化,则事务会中止,否则事务执行所有命令 返回每一条[redis command]的结果组成的列表

DISCARD

> SET foo 1
OK
> MULTI
OK
> INCR foo
QUEUED
> DISCARD
OK
> GET foo
"1"

MULTI与EXEC

> MULTI
OK
> INCR foo
QUEUED
> INCR bar
QUEUED
> EXEC
1) (integer) 1
2) (integer) 1

WATCH

WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC

事务中错误

  • 语法错误:如错误参数的个数 ,错误的command名等
  • 赋值错误:如对一个string类型的key调用list的操作方法等

当事务中的[redis command]存在赋值错误时,事务不会停止执行命令,如下面的LPOP connections对一个strings类型的key使用list的LPOP方法,产生错误WRONGTYPE Operation against a key holding the wrong kind of value

语法错误:

MULTI
+OK
INCR a b c
-ERR wrong number of arguments for 'incr' command

赋值错误:

> MULTI
OK
> SET connections 10
QUEUED
> INCR connections
QUEUED
> LPOP connections
QUEUED
> GET connnections
QUEUED
> SET connections 10
QUEUED
> EXEC
1) OK
2) 11
3) WRONGTYPE Operation against a key holding the wrong kind of value
4) (nil)
5) OK

猜你喜欢

转载自www.cnblogs.com/myibu/p/12810197.html
今日推荐