闽公网安备 35020302035485号
.对资源的访问是互斥的。
10.B建立资源成功,B获得了锁
算法设计的实现机制:
采用了对 Redis 集群中每个独立节点尝试获取锁的方法,客户端向集群中的每一个 Redis 节点请求加锁,并为锁设置一个较短的过期时间。如果客户端能在集群中超过半数以上的节点(即 N/2+1 个节点)上锁成功,那么系统就认为分布式锁获取成功。例如,在一个包含5个节点的 Redis 集群中,客户端需要在至少3个节点上成功加锁才能宣布获取分布式锁成功。public class RedLockDemo {
public static void main(String[] args) {
// 堆代码 duidaima.com
// 创建 Redisson 客户端配置
Config config = new Config();
config.useClusterServers()
.addNodeAddress("redis://192.168.207.128:6379",
"redis://192.168.207.129:6379",
"redis://192.168.207.130:6379");
// 创建 Redisson 客户端实例
RedissonClient redissonClient = Redisson.create(config);
// 创建 RedLock 对象
RedissonRedLock redLock = redissonClient.getRedLock("yian");
try {
// 尝试获取分布式锁,最多尝试 5 秒获取锁,并且锁的有效期为 5000 毫秒
boolean lockAcquired = redLock.tryLock(5, 5000, TimeUnit.MILLISECONDS);
if (lockAcquired) {
// 加锁成功,执行业务代码...
} else {
System.out.println("Failed to acquire the lock!");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.err.println("Interrupted while acquiring the lock");
} finally {
// 无论是否成功获取到锁,在业务逻辑结束后都要释放锁
if (redLock.isLocked()) {
redLock.unlock();
}
// 关闭 Redisson 客户端连接
redissonClient.shutdown();
}
}
}