在分布式系统中,多个节点可能需要对共享资源进行互斥访问,此时需要分布式锁。Redis 常用于实现分布式锁,其核心实现方式如下:
SETNX(SET if Not eXists)命令或 SET 命令的 NX 参数,确保只有当锁不存在时才能设置成功。EX 参数为锁设置过期时间,防止持有锁的节点崩溃后锁无法释放。unlock 方法释放锁。import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
public class RedissonWatchdogExample {
public static void main(String[] args) {
// 配置 Redisson
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379");
// 设置看门狗超时时间(单位:毫秒)
// 默认值为 30000 毫秒(30秒),这里设置为 60秒
config.setLockWatchdogTimeout(60000);
// 创建 Redisson 客户端
RedissonClient redisson = Redisson.create(config);
// 获取分布式锁
RLock lock = redisson.getLock("myLock");
try {
// 尝试获取锁,看门狗机制会自动续期锁
boolean isLocked = lock.tryLock();
if (isLocked) {
System.out.println("锁获取成功,执行业务逻辑...");
// 模拟业务逻辑执行时间
Thread.sleep(100000); // 100秒
System.out.println("业务逻辑执行完成,释放锁...");
} else {
System.out.println("锁获取失败,已有其他线程持有锁...");
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 释放锁
if (lock.isHeldByCurrentThread()) {
lock.unlock();
System.out.println("锁已释放");
}
}
// 关闭 Redisson 客户端
redisson.shutdown();
}
}原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。