首页 > 解决方案 > 使用 Redis 的分布式锁 (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 的对象的 hashcode)

标签: javacachingredisdistributed-cachingredisson

解决方案


推荐阅读