Redis主要是有MULTI(开启事务)、EXEC(提交事务)、DISCARD(取消事务)、WATCH(监控一个变量是否发生变化) 4个指令
1) 当WATCH不存在时,事务等于检测一连串命令是否有错误,有错误的话则自动取消事务,指令没出错的情况下才能决定回滚还是提交.
2) 当WATCH存在时:
①如果WATCH的变量发生变化,则整个事务返回NULL
②如果WATCH的变量没有变化,则执行1)
1、成功执行一个没有WATCH的事务
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET name 'smister'
QUEUED
127.0.0.1:6379> set age 28
QUEUED
127.0.0.1:6379> set favor "play game"
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
3) OK
#如果使用DISCARD则是不执行
2、错误执行一个没有WATCH的事务
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set name 'smister'
QUEUED
127.0.0.1:6379> se age 19
(error) ERR unknown command 'se' <-- 错误
127.0.0.1:6379> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
3、成功执行一个WATCH的事务
127.0.0.1:6379> WATCH flag
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set name 'smister'
QUEUED
127.0.0.1:6379> set age 28
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
4、失败执行一个WATCH的事务
127.0.0.1:6379(客户端1)> WATCH flag
OK
127.0.0.1:6379(客户端1)> MULTI
127.0.0.1:6379> set name 'smister'
QUEUED 127.0.0.1:6379
(客户端2)>SET flag 'false'
OK <--- 这里是客户端2,跟上面的事务不在同一客户端
127.0.0.1:6379> set age 28
QUEUED
127.0.0.1:6379> EXEC
(nil) <--- 执行为NULL
版权声明:未经博主允许不得转载。http://smister.com/post-44/transactions.html