前言
联合锁和红锁放在一起来分析,是因为这两种锁实现在Redisson中,关联密切。
/** * Returns MultiLock instance associated with specified <code>locks</code> * * @param locks - collection of locks * @return MultiLock object */ RLock getMultiLock(RLock... locks); /* * Use getLock method instead. Returned instance uses Redis Slave synchronization */ @Deprecated RLock getRedLock(RLock... locks);
红锁
上面getRedLock方法上有@Deprecated注解,说明在Redisson实现中,不推荐使用红锁。
简介
红锁是官方提出的一个锁方案,大概如下:
假设redis集群有5个节点,一个客户端申请锁时,会向所有的节点申请锁,只有大于一半的节点数量返回成功,且耗费的总时间小于锁有效时间,才会判定为拿锁成功,否则会被认定为失败,需要将已经成功的节点锁释放掉。
具体官方文档见:redis.io/topics/dist…
实现
RedissonRedLock继承了联合锁【RedissonMultiLock】,也没有重写核心方法。
/** * RedLock locking algorithm implementation for multiple locks. * It manages all locks as one. * * @see <a href="http://redis.io/topics/distlock">http://redis.io/topics/distlock</a> * * @author Nikita Koksharov * */ public class RedissonRedLock extends Redisso