1.事务
Redis提供了一定的事务支持,可以保证一组操作原子执行不被打断
multi 开启事务
exec 执行事务
Redis Cluster 集群不支持事务
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a 100
QUEUED
127.0.0.1:6379> get a
QUEUED
127.0.0.1:6379> exec
1) OK
2) "100"
但是如果执行中出现错误,事务不能回滚,Redis未提供回滚支持。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set c 300
QUEUED
127.0.0.1:6379> hgetall a
QUEUED
127.0.0.1:6379> set d 400
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
3) OK
2.watch
若在构建的redis事务在执行时依赖某些值,可以使用watch对数据值进行监视。
这样在事务中发现值变更就会报错,不会再继续执行。
127.0.0.1:6379> set stock 100
OK
127.0.0.1:6379> watch stock
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incrby stock -1
QUEUED
127.0.0.1:6379> incr sales
QUEUED
127.0.0.1:6379> exec
1) (integer) 99
2) (integer) 1
另一个客户端修改
127.0.0.1:6379> incrby stock -2
(integer) 98
事务需要监视的stock值发生了变化,事务不能执行了。
127.0.0.1:6379> exec
(nil)