使用Redis的分布式锁(Redisson):锁如何在服务器实例之间工作?

时间:2019-04-09 12:02:11

标签: java caching redis distributed-caching redisson

问题陈述:

各种花园式的分布式锁定。

为服务运行分布式锁定,该服务正在运行多个实例。

要在1个主节点和2个从节点上运行的'redis'上获取锁定。

实施:

服务实例1

    RLock lock11 = redisson.getLock("lock11");
    RLock lock12 = redisson.getLock("lock12");
    RLock lock13 = redisson.getLock("lock13");

    RedissonRedLock lock = new RedissonRedLock(lock11, lock12, lock13);
    lock.lock();

    //...

    lock.unlock();

服务实例2

    RLock lock21 = redisson.getLock("lock21");
    RLock lock22 = redisson.getLock("lock22");
    RLock lock23 = redisson.getLock("lock23");

    RedissonRedLock lock = new RedissonRedLock(lock21, lock22, lock23);
    lock.lock();

    //...

    lock.unlock();

预期的行为:

如果服务实例1取得了锁,则服务实例2应该无法取得该锁。 (对于分布式锁定-这应该是正常行为)

问题:

Redis如何知道将创建对象“ lock11” 而不是对象“ lock21”

我们(作为开发人员)是否需要对哈希冲突进行编程?

注意:这两个对象将具有不同的hashCode(服务实例1将不知道服务实例2的对象的哈希码)

0 个答案:

没有答案