Redis实现的分布式锁的java代码
时间: 2024-10-14 11:06:57 浏览: 37
Redis分布式锁在Java中通常通过Jedis客户端库来实现。以下是一个简单的示例,展示了如何使用Redis的SETNX命令和EXPIRE来获取和释放分布式锁:
```java
import redis.clients.jedis.Jedis;
public class RedisLock {
private static final String lockKey = "my_lock_key";
private static final int lockTimeout = 60 * 1000; // 锁超时时间(单位毫秒)
public boolean acquireLock(Jedis jedis) {
long result = jedis.setnx(lockKey, "1"); // 使用SETNX尝试获取锁,如果不存在则设置并返回1
if (result > 0) { // 如果setnx成功(即锁未被其他线程获取)
try {
jedis.expire(lockKey, lockTimeout); // 设置锁过期时间为lockTimeout
return true;
} catch (Exception e) {
jedis.del(lockKey); // 锁获取失败,立即删除已设置的锁
return false;
}
} else {
return false; // 已有线程持有锁,当前请求失败
}
}
public void releaseLock(Jedis jedis) {
jedis.del(lockKey); // 当需要解锁时,直接从Redis中删除该键
}
}
```
在这个例子中,`acquireLock`方法会尝试获取锁,如果成功,它会在锁上设置一个过期时间;如果失败(锁已被其他线程获得),它会立即释放(删除)自己已经尝试设置的锁。而`releaseLock`用于手动释放锁定。
阅读全文