java redis实现分布式锁
时间: 2024-09-27 15:01:41 浏览: 47
Java基于redis实现分布式锁代码实例
在 Java 中使用 Redis 实现分布式锁是一种常见的解决方案,因为它提供了快速、内存持久化和跨机器通信的能力。Redis 的分布式锁通常基于两个核心操作:SETNX 和 DEL。
1. SETNX 操作用于尝试原子地设置 key 对应的值(通常是“locked”),如果键不存在则设置并返回成功,否则返回失败。这实现了获取锁的独占性。
2. DEL 操作用于释放锁,当需要解锁时,通过删除该键来完成,如果键不存在,则表明锁已经被其他进程释放。
以下是简单的 Java 示例:
```java
import redis.clients.jedis.Jedis;
public class DistributedLock {
private final String lockKey;
private Jedis jedis;
public DistributedLock(Jedis jedis, String lockKey) {
this.jedis = jedis;
this.lockKey = lockKey;
}
// 获取锁
public boolean tryLock(long timeoutSeconds) {
return jedis.setnx(lockKey, System.currentTimeMillis() + timeoutSeconds * 1000) == 1;
}
// 释放锁
public void releaseLock() {
if (jedis.del(lockKey) > 0) {
// 锁已存在并被正确释放
System.out.println("Lock released successfully");
} else {
// 错误释放,可能是锁已被他人获取
System.out.println("Failed to release lock, it might be already unlocked by another process.");
}
}
}
```
阅读全文