Совместное использование одного соединения между несколькими потоками является предполагаемым использованием. Существует несколько причин:
- Соединения являются потокобезопасными.
- Redis однопоточный. Использование нескольких соединений с одним хостом явно не имеет смысла, поскольку нет увеличения производительности из-за отсутствия параллелизма обработки Redis.
- Пул соединений открывает несколько соединений. Хотя это может иметь смысл для изоляции транзакций и блокировки, объединение может привести к ухудшению производительности. Единственный сервер Redis, который получает соединения с нескольких серверов приложений, остается занятым, в первую очередь, принятием и управлением соединениями. Однопоточная природа Redis влияет также на процесс приема и удаления соединений.
Что касается конвейерной обработки: салат не ждет завершения команды перед отправкой последующих команд в Redis, что означает, что салат использует конвейерную обработку по умолчанию. Единственный способ предотвратить конвейерную обработку - вне синхронизации при вызове команды.
Каждая команда очищается непосредственно от TCP-соединения. Салат-латук может использовать группировку для группировки команд перед тем, как погрузить их в соединение. Командная промывка - ручная вещь и больше предназначена для объемной загрузки, а не для реактивного использования.
Есть еще две вещи:
- вики должен ответить на ваши вопросы в более глубоком уровне детализации: https://github.com/mp911de/lettuce/wiki
- латук проводит переход от RxJava 1 к API Реактивные Streams на основе Project Reactor. Это происходит с салатом 5.0, из которого первая бета-версия уже доступна.
НТН,
Марк