悲观锁:什么时候都出问题,无论做什么都加锁
乐观锁:什么时候都不会出现问题,所以不会上锁,更新数据的时候进行判断,在此期间是否有人对数据进行了改变
获取version,更新的时候比较version,
监控==watch。事务正常结束,数据期间没有发生改变,这个时候就正常执行成功,监视失败,要放弃监视unwatch==,再重新监视
127.0.0.1:6379> set money 1000
OK
127.0.0.1:6379> set out 0
OK
127.0.0.1:6379> watch money # 监视money
OK
127.0.0.1:6379> multi # 事务正常结束,如果在事务还未执行的时候有另一个线程对该值进行了修改,那么这个事务会提交失败,你需要放弃监视,重新监视,再来做相关的事务
OK
127.0.0.1:6379> DECRBY money 100
QUEUED
127.0.0.1:6379> INCRBY out 100
QUEUED
127.0.0.1:6379> exec
1) (integer) 900
2) (integer) 100
127.0.0.1:6379> mget money out
1) "900"
2) "100"