.对资源的访问是互斥的。
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(); } } }