使用java代码做一个可以满足复杂业务的redis分布式锁
时间: 2024-01-23 12:03:39 浏览: 96
以下是一个使用Java代码实现分布式锁的示例:
```java
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;
public class RedisDistributedLock {
private Jedis jedis;
private String lockKey;
private String lockValue;
private int expireTime; // 锁过期时间,单位:秒
public RedisDistributedLock(Jedis jedis, String lockKey, String lockValue, int expireTime) {
this.jedis = jedis;
this.lockKey = lockKey;
this.lockValue = lockValue;
this.expireTime = expireTime;
}
public boolean lock() {
SetParams params = new SetParams();
params.nx(); // 只有锁不存在时才设置
params.ex(expireTime); // 设置锁过期时间
String result = jedis.set(lockKey, lockValue, params);
return "OK".equals(result);
}
public void unlock() {
String currentLockValue = jedis.get(lockKey);
if (lockValue.equals(currentLockValue)) {
jedis.del(lockKey);
}
}
}
```
使用方法:
```java
Jedis jedis = new Jedis("localhost", 6379);
RedisDistributedLock lock = new RedisDistributedLock(jedis, "lockKey", "lockValue", 60);
if (lock.lock()) {
try {
// 执行业务代码
} finally {
lock.unlock();
}
}
```
在上面的示例代码中,我们使用了Redis的`SET`命令来实现分布式锁。通过设置`NX`参数,只有在锁不存在时才会设置成功。同时,通过设置`EX`参数,可以设置锁的过期时间,避免死锁的情况发生。在释放锁时,我们通过比较当前锁的值是否为自己设置的值来判断是否可以删除锁。
阅读全文