再写一份直接在Java类中定义好的
时间: 2024-09-27 12:11:10 浏览: 32
在Java中,你可以使用JedisCluster或Jedisson库来实现Redis分布式锁。以下是使用Jedisson库的一个简化版的Java代码示例:
首先,你需要添加Jedisson的依赖到你的Maven项目中:
```xml
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.0.0</version> <!-- 选择最新的版本 -->
</dependency>
<dependency>
<groupId>io.j缘分</groupId>
<artifactId>jedisson</artifactId>
<version>5.4.6</version> <!-- 选择最新的版本 -->
</dependency>
```
然后,定义一个简单的Java类来封装分布式锁:
```java
import io.j缘分.jedis.Jedisson;
import org.redisson.Redisson;
import org.redisson.api.RLock;
public class DistributedLock {
private static final String REDIS_LOCK_KEY_FORMAT = "distributed_lock:%s";
private static final int DEFAULT_LOCK_TIMEOUT = 60; // 秒
public static RLock getLock(String lockName) {
Redisson client = Jedisson.create();
String lockKey = String.format(REDIS_LOCK_KEY_FORMAT, lockName);
RLock lock = client.getLock(lockKey);
lock.setLeaseTime(DEFAULT_LOCK_TIMEOUT * 1000); // 将锁的超时时间转换为毫秒
return lock;
}
public static void releaseLock(RLock lock) {
if (lock != null && lock.isLocked()) {
lock.unlock();
}
}
public static void main(String[] args) {
try (RLock lock = getLock("myLock")) {
if (lock.tryLock()) { // 非阻塞获取锁
System.out.println("Acquired the lock");
// 执行业务逻辑...
lock.unlock(); // 任务完成后释放锁
} else {
System.out.println("Failed to acquire the lock");
}
} catch (Exception e) {
System.err.println("Error acquiring or releasing lock: " + e.getMessage());
}
}
}
```
在这个例子中:
- `getLock()` 方法创建了一个Redisson实例并获取了锁。
- `releaseLock()` 方法用于解锁,如果锁已被其他线程释放,那么会忽略此请求。
- 主函数展示了如何在获取锁后执行业务逻辑。
阅读全文