那用java代码如何实现呢
时间: 2024-03-06 10:52:10 浏览: 16
下面是使用 Java 代码实现 Redis 分布式锁的示例代码:
```java
public class RedisDistributedLock {
private static final String LOCK_PREFIX = "order:";
private static final String LOCK_SUFFIX = ":lock";
private static final int LOCK_EXPIRE_TIME = 60; // 锁的有效期,单位秒
private Jedis jedis;
public RedisDistributedLock(Jedis jedis) {
this.jedis = jedis;
}
public boolean acquireLock(String orderId) {
String lockKey = LOCK_PREFIX + orderId + LOCK_SUFFIX;
long result = jedis.setnx(lockKey, "locked");
if (result == 1) { // 获取锁成功
jedis.expire(lockKey, LOCK_EXPIRE_TIME);
return true;
}
return false;
}
public void releaseLock(String orderId) {
String lockKey = LOCK_PREFIX + orderId + LOCK_SUFFIX;
jedis.del(lockKey);
}
}
```
在上述代码中,通过传入一个 Jedis 实例来初始化 RedisDistributedLock 对象。在 acquireLock 方法中,使用 Redis 的 setnx 命令尝试获取锁,如果返回值为 1,说明获取锁成功;否则,说明已经有其他线程/节点持有锁了。
在获取锁成功后,使用 Redis 的 expire 命令设置锁的过期时间,以防止锁一直被持有而无法释放。在 releaseLock 方法中,通过 del 命令删除对应的 key,以便其他线程/节点可以再次获取锁。
需要注意的是,上述代码中没有对锁的重入和容错性进行处理,需要根据具体业务场景进行扩展。同时,为了保证 Redis 连接的释放,需要在使用完 Redis 连接后及时将连接关闭。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)