java Redis实现分布式锁案例
时间: 2024-02-20 16:32:01 浏览: 209
下面是一个基于 Redis 实现分布式锁的 Java 代码示例:
```java
import redis.clients.jedis.Jedis;
public class RedisDistributedLock {
private Jedis jedis;
public RedisDistributedLock(Jedis jedis) {
this.jedis = jedis;
}
public boolean tryLock(String key, String value, int expireTime) {
String result = jedis.set(key, value, "NX", "EX", expireTime);
return "OK".equals(result);
}
public void unlock(String key, String value) {
String oldValue = jedis.get(key);
if (value.equals(oldValue)) {
jedis.del(key);
}
}
}
```
这里使用了 Redis 的 set 命令实现锁的获取,其中 "NX" 表示只在 key 不存在时才设置值,"EX" 表示设置 key 的过期时间为 expireTime 秒。在释放锁时需要先验证锁的持有者是否为当前线程,如果是则删除对应的 key。
使用示例:
```java
Jedis jedis = new Jedis("localhost", 6379);
RedisDistributedLock lock = new RedisDistributedLock(jedis);
String key = "mylock";
String value = UUID.randomUUID().toString();
int expireTime = 60; // 锁的过期时间为 60 秒
if (lock.tryLock(key, value, expireTime)) {
try {
// 执行需要加锁的代码
} finally {
lock.unlock(key, value);
}
}
```
这里使用了 UUID 作为锁的持有者标识,也可以使用其他的方式生成唯一标识符。
阅读全文