127.0.0.1:6379> set hz 1000
OK
127.0.0.1:6379> set wangdan 1000
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby hz 100
QUEUED
127.0.0.1:6379> incrby wangdan 100
QUEUED
127.0.0.1:6379> exec
1) (integer) 900
2) (integer) 1100
127.0.0.1:6379> get hz
"900"
127.0.0.1:6379> get wangdan
"1100"
127.0.0.1:6379>
multi 开启事务
decrby hz 100 // hz 减少 100
QUERUED 成功加入队列
incrby wangdan 100 //wangdan 增加 100
QUERUED 成功加入队列
exec 关闭事务 返回操作之后的
注意事项
redis事务里面是不可以嵌套事务的。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> multi
(error) ERR MULTI calls can not be nested
127.0.0.1:6379>
redis事务中如果报错了,事务在什么情况下回滚,什么情况下不会滚,为什么不会回滚。
运行时的异常(exce之后)不会回滚 编译器没有办法确认的异常是不会全部回滚的
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set h1 1 //对String类型h1的操作
QUEUED
127.0.0.1:6379> hset h1 a b //因为h1是String类型的key,不能用HASH类型的指令去操作String类型的key
QUEUED
127.0.0.1:6379> exec
1) OK //第一个入队操作成功
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value //第二个入队操作报错
127.0.0.1:6379> get h1
"1" //实际确认 第一个入队操作确实有效
127.0.0.1:6379> hget h1 a
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379>
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set hz 2222
QUEUED
127.0.0.1:6379> hset hc 3333 //hash类型操作 语法有错误
(error) ERR wrong number of arguments for 'hset' command
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get hz
(nil)
127.0.0.1:6379> hget hc 333
(nil)
127.0.0.1:6379>