目录
案例四:冤有头,债有主(组内有命令出现问题,但并不是语法问题)
简述事务的执行命令
- 事务从输入multi命令开始,之后的命令都会依次压入命令缓冲队列中,并不会执行,直到输入exec后才会被执行。
- Redis会将之前的命令缓冲队列中的命令依次执行。组队过程中,可以通过discard来放弃组队。
案例一:正常执行
- 127.0.0.1:6379> set t1 1
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set id 12
QUEUED
127.0.0.1:6379(TX)> get id
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> get t1
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) "12"
3) (integer) 2
4) "2"
- 127.0.0.1:6379> set t1 1
案例二:放弃事务
- 127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set name z3
QUEUED
127.0.0.1:6379(TX)> set age 29
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> discard
OK
- 127.0.0.1:6379> multi
案例三:全体株连(组内有命令的语法出现问题)
- 127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set name z3
QUEUED
127.0.0.1:6379(TX)> set age 29
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> discard
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set name z3
QUEUED
127.0.0.1:6379(TX)> get name
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> get t1
QUEUED
127.0.0.1:6379(TX)> set email
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
- 127.0.0.1:6379> multi
案例四:冤有头,债有主(组内有命令出现问题,但并不是语法问题)
- 127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set age 11
QUEUED
127.0.0.1:6379(TX)> incr t1
QUEUED
127.0.0.1:6379(TX)> set email abc@123.com
QUEUED
127.0.0.1:6379(TX)> incr email
QUEUED
127.0.0.1:6379(TX)> get age
QUEUED
127.0.0.1:6379(TX)> exec
1) OK
2) (integer) 3 ——在正常执行的案例中t1的值已经添加到了2,故当命令2再次对t1值进行增值(增长1个单位数值)操作时,就会由2变成3 - 3) OK
4) (error) ERR value is not an integer or out of range
5) "11"
- 127.0.0.1:6379> multi