Мне нужно подключиться к одному экземпляру Redis из приложения-клиента.
Поскольку клиент будет реплицирован в Kubernetes, я изучаю документацию Redis о блокировках, чтобы предотвратить гонки между клиентскими репликами.
После некоторого поиска и поиска я обнулел эти два ресурса:
Интересно, что документы SETNX
явно рекомендуют не использовать SETNX
для реализации блокировок, заявляя, что он в основном устарел:
следующий шаблон не рекомендуется в пользу алгоритма Redlock [...]
Мы все равно документируем старый шаблон, потому что некоторые существующие реализации ссылаются на эту страницу в качестве ссылки.
ОднакоАлгоритм Redlock специально предназначен для распределенных блокировок, таким образом, когда кто-то пытается заблокировать несколько экземпляров Redis - они фактически ссылаются на несколько master .
Чтобы пойти немного дальше, библиотека redsync (golang) объявляет функцию New
следующим образом:
func New(pools []Pool) *Redsync {
return &Redsync{
pools: pools,
}
}
Она безошибочно разработана для поддержки блокировки накластер Redis.
В моем случае я собираюсь подключиться только к одному экземпляру Redis.
Возможно, я могу просто использовать пакет redsync и передать массив длины один, но для меня это выглядитнапример, шаблон SETNX
может одинаково хорошо работать на одном экземпляре Redis.
Правильно ли я это вижу?Спасибо