Redisson getLock () безопасен для использования распределенной блокировки? - PullRequest
1 голос
/ 07 марта 2020

Является ли метод Редиссона getLock() хорошим для распределенного варианта использования и как он сравнивается с getRedLock()?

Redisson (3.11.x) есть несколько способов создания блокировок:

Какой алгоритм использует getLock() и является ли он безопасно для распределенного использования? Документация гласит:

Реализует несправедливую блокировку , поэтому не гарантирует порядок получения по потокам.

Я хочу сравнить getLock() с getRedLock(), который использует Redlock и задокументирован на верхнем уровне страницы Redis 'distlock: https://redis.io/topics/distlock:

Эта страница является попыткой предоставить более канонический алгоритм для реализации распределенных блокировок с помощью Redis. Мы предлагаем алгоритм Redlock, который реализует DLM, который мы считаем более безопасным, чем ванильный подход с одним экземпляром.

1 Ответ

1 голос
/ 07 марта 2020

Подходит ли метод Redisson getLock () для распределенного варианта использования и как он сравнивается с getRedLock ()?

Все блокировки Redisson подходят для распределенного варианта использования. Алгоритм RedLock предполагает, что у вас есть блокировка на главный узел в кластере. Алгоритм RedLock является предложением, и, к сожалению, нет отзывов о его использовании. За исключением анализа https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html

Какой алгоритм использует getLock () и является ли он безопасным для распределенного использования?

RLock объект хранится как один объект в Redis. Другие потоки уведомляются через слушателей pubsub, если блокировка снята. Также есть настройка lockWatchdogTimeout, позволяющая определить время, по истечении которого блокировка будет снята, если текущий поток не активен.

UPDATE Начиная с версии 3.12.5, метод getLock () возвращает блокировку с улучшенным надежность при отказе. getRedLock () устарела.

...