redis实现分布式锁,java代码
时间: 2023-08-24 20:04:49 浏览: 48
好的,关于redis实现分布式锁的Java代码,可以参考以下示例:
```java
import redis.clients.jedis.Jedis;
public class RedisLock {
private Jedis jedis;
public RedisLock(Jedis jedis) {
this.jedis = jedis;
}
/**
* 加锁
* @param lockKey 锁名称
* @param requestKey 请求标识
* @param expireTime 锁定时间(单位:秒)
* @return
*/
public boolean lock(String lockKey, String requestKey, int expireTime) {
// 使用setnx方法尝试加锁,若返回1则加锁成功
Long lockResult = jedis.setnx(lockKey, requestKey);
if (lockResult != null && lockResult == 1) {
// 设置锁的过期时间,避免原子性操作失败时死锁
jedis.expire(lockKey, expireTime);
return true;
}
return false;
}
/**
* 解锁
* @param lockKey 锁名称
* @param requestKey 请求标识(确保只有加锁的请求才能解锁)
*/
public void unlock(String lockKey, String requestKey) {
String lockedBy = jedis.get(lockKey);
if (lockedBy != null && lockedBy.equals(requestKey)) {
// 若锁已经被该请求方加锁,则解锁
jedis.del(lockKey);
}
}
}
```
使用示例:
```java
Jedis jedis = new Jedis("localhost", 6379);
RedisLock redisLock = new RedisLock(jedis);
// 加锁
boolean locked = redisLock.lock("myLock", "myRequest", 60);
if (locked) {
try {
// 执行业务代码
} finally {
// 解锁
redisLock.unlock("myLock", "myRequest");
}
}
```
以上是一个简单的redis分布式锁实现的Java代码示例,希望能够帮到你。