Redis实现乐观锁
监控!Watch/unwatch(解锁,如果事务执行失败,先解锁,然后再次手动去监视)
- 悲观锁:
- 很悲观,什么时候都会出问题,无论做什么都会加锁!
- 乐观锁
- 很乐观,认为什么时候都不会出问题,不会加锁!更新数据的时候判断,在此期间是否有人修改过这个数据。
- 获取version
- 更新时比较version
127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> set k2 0
OK
127.0.0.1:6379> WATCH k1 #监控
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> DECRBY k1 20
QUEUED
127.0.0.1:6379(TX)> INCRBY k2 20
QUEUED
127.0.0.1:6379(TX)> EXEC #执行之前,另外一个线程修改了监控值,导致事务执行失败
(nil)
127.0.0.1:6379>
####################### 在上一个线程EXEC之前 执行以下命令 #########
127.0.0.1:6379> set k1 1000
OK