Redis与mysql事务的对比:
Mysql:
开启:start transaction 语句:普通sql 失败:rollback(回滚) 成功:commit
Redis:
开启:muitl 语句:普通命令 失败:discard(取消) 成功:exec
rollback与discard 的区别:
如果已经成功执行了2条语句, 第3条语句出错。Rollback后,前2条的语句影响消失。Discard只是结束本次事务,前2条语句造成的影响仍然还在
redis事物中的乐观锁(watch监听):
比如说用户正在买票 Ticket -1 , money -100 。 而票只有1张, 如果在用户multi之后,和exec之前, 票被别人买了---即ticket变成0了。应该如何观察这种情景,并不再提交?
悲观锁:
世界充满危险,肯定有人和我抢, 给 ticket上锁, 只有我能操作. [悲观锁]
乐观锁:
没有那么人和我抢,因此,我只需要注意有没有人更改ticket的值就可以了
Redis的事务中,启用的是乐观锁,只负责监听key没有被改动.
watch key1 key2 ... keyN
作用:监听key1 key2..keyN有没有变化,如果有变, 则事务取消
unwatch
作用:取消所有watch监听