Распределенные блокировки с помощью Redis (Redisson): как работает блокировка между экземплярами сервера? - PullRequest
0 голосов
/ 09 апреля 2019

Постановка задачи:

Разнообразие распределенных блокировок в саду.

Реализация распределенной блокировки для службы, в которой запущено несколько экземпляров.

Блокировка должна быть взята на 'redis', работающем на 1 ведущем и 2 ведомых.

Реализация:

Экземпляр обслуживания 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" ?

Нужно ли нам (как разработчикам) программировать что-либо для коллизии хэшей?

Примечание: два объекта будут иметь разныеhashCodes (экземпляр службы 1 НЕ будет знать хеш-код объекта экземпляра службы 2)

...