Redis实现乐观锁

使用watch监控key,对key实现加锁

假设有个age的key,我们开两个连接进行赋值操作

连接一 监控age,开始事务,复制操作,先不执行exec

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> set age 1
OK
127.0.0.1:6379> watch age
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 10
QUEUED
127.0.0.1:6379> get age
QUEUED

连接二 直接执行赋值操作

1
2
127.0.0.1:6379> set age 100
OK

回到连接一,执行exec操作,此时age值已被连接2改变,事务执行失败

1
2
3
4
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get age
"100"