redis实现乐观锁

所谓的乐观锁,其实就是基于CAS机制,即compareAndSwap。就是需要知道一个key在修改前的值,去进行

比较

redis想要实现,可以依赖于Watch命令,这个命令可以实现Watch监视的key在调用exec之前没改变时,才会

去执行后续事务任务

MULTI:开启事务

SET:在事务中添加命令

EXEC:执行事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class RedisOptimisticLock {
public static void main(String[] args) {
// 连接到 Redis
Jedis jedis = new Jedis("localhost");

try {
// 监视键
String key = "myKey";
jedis.watch(key);

// 模拟从数据库读取最新值
String value = jedis.get(key);
int intValue = Integer.parseInt(value);

// 开始事务
Transaction t = jedis.multi();

// 在事务中执行操作
t.set(key, String.valueOf(intValue + 1));

// 尝试执行事务
if (t.exec() == null) {
System.out.println("事务执行失败,数据已被其他客户端修改");
} else {
System.out.println("事务执行成功");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
}