1.redis事务基本操作
127.0.0.1:6379> multi //开启事务
OK
127.0.0.1:6379(TX)> set k1 v1 //命令入队
QUEUED
127.0.0.1:6379(TX)> set k2 v2 //命令入队
QUEUED
127.0.0.1:6379(TX)> exec //提交事务
2.取消事务
127.0.0.1:6379> multi //开启事务
OK
127.0.0.1:6379(TX)> set k1 v1 //命令入队
QUEUED
127.0.0.1:6379(TX)> set k2 v2 //命令入队
QUEUED
127.0.0.1:6379(TX)> discard //取消事务,执行取消事务操作,所有命令 都不执行
3.异常
1.编译型异常
即代码有语法错误,则事务中的所有命令都不会执行;如下:
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 //明显的语法错误
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379(TX)> exec
(error) EXECABORT Transaction discarded because of previous errors.
2.运行时异常
即在运行时出现错误,但语法结构正确,则事务中该命令不会执行,但其他命令会正常执行;如下:
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> incr k1
QUEUED
127.0.0.1:6379(TX)> set k5 v5
QUEUED
127.0.0.1:6379(TX)> exec
1) (error) ERR value is not an integer or out of range //k1不是integer类型
2) OK
从运行时异常中也可以看出在redis中事务是不保证原子性的,但其单条命令是可以保证原子性的!