2017-02-06 10 views
0

Я портирую свой текущий проект от Jedis до Lettuce.Салат: Совместное соединение для реактивного API

  1. Можно ли использовать совместное соединение для реактивного API? До тех пор, пока я не вызываю блокировку и транзакционные операции, такие как BLPOP и MULTI/EXEC?

  2. Должен ли я использовать объединенные соединения для транзакций через реактивный API?

  3. Можно ли выполнять конвейерные команды через реактивный API? Должен ли я использовать для этого выделенное соединение?

ответ

1

Совместное использование одного соединения между несколькими потоками является предполагаемым использованием. Существует несколько причин:

  1. Соединения являются потокобезопасными.
  2. Redis однопоточный. Использование нескольких соединений с одним хостом явно не имеет смысла, поскольку нет увеличения производительности из-за отсутствия параллелизма обработки Redis.
  3. Пул соединений открывает несколько соединений. Хотя это может иметь смысл для изоляции транзакций и блокировки, объединение может привести к ухудшению производительности. Единственный сервер Redis, который получает соединения с нескольких серверов приложений, остается занятым, в первую очередь, принятием и управлением соединениями. Однопоточная природа Redis влияет также на процесс приема и удаления соединений.

Что касается конвейерной обработки: салат не ждет завершения команды перед отправкой последующих команд в Redis, что означает, что салат использует конвейерную обработку по умолчанию. Единственный способ предотвратить конвейерную обработку - вне синхронизации при вызове команды.

Каждая команда очищается непосредственно от TCP-соединения. Салат-латук может использовать группировку для группировки команд перед тем, как погрузить их в соединение. Командная промывка - ручная вещь и больше предназначена для объемной загрузки, а не для реактивного использования.

Есть еще две вещи:

  1. вики должен ответить на ваши вопросы в более глубоком уровне детализации: https://github.com/mp911de/lettuce/wiki
  2. латук проводит переход от RxJava 1 к API Реактивные Streams на основе Project Reactor. Это происходит с салатом 5.0, из которого первая бета-версия уже доступна.

НТН,

Марк