Redis中的事务

Redis支持简单的事务;
Redis与mysql事务对比:

mysql redis
开启 start transaction muitl
语句 普通sql 普通命令
失败 rollback回滚 discard 取消
成功 commit exec
注:rollback与discard的区别:
如果已经执行了两条语句,执行第三条是出错:
rollback前两句语句影响消失;
discard只是结束本次事务,前两句造成影响依旧存在;

在mutil后面的语句中,语句出错可能有2种情况:
1. 语法就有问题,这种exec时报错,所有语句得不到执行;
2. 语法本身没错,但适用对象有问题,比如 zadd操作list对象,exec之后,会执行正确语句,并跳过有不适当的语句;

redis事务中,启用的是乐观锁,只负责监测key是否有变动;

watch key1 key2  ... keyN

作用:监听key1 key2..keyN有没有变化,如果有变, 则事务取消

unwatch

作用: 取消所有watch监听

redis 127.0.0.1:6379> watch ticket
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> decr ticket
QUEUED
redis 127.0.0.1:6379> decrby money 100
QUEUED
redis 127.0.0.1:6379> exec
(nil)   // 返回nil,说明监视的ticket已经改变了,事务就取消了.
redis 127.0.0.1:6379> get ticket
"0"
redis 127.0.0.1:6379> get money
"200"

你可能感兴趣的:(redis,事务)