Как и большинство подключений к серверам databaseish вы хотите сохранить открытые соединения. Повторное соединение занимает много времени и TCP-пакетов по сравнению с отправкой 1 пакета запросов и получением одного пакета ответа почти мгновенно назад.
Управление соединениями обычно осуществляется с помощью реализации пула. В случае салата docs state
салата обеспечивает пулы соединений для Redis Standalone и Redis Сентинел управляемых соединений. Хотя при использовании салата сборку не нужно, это может быть полезно для некоторых определенных сценариев. Соединения латуни рассчитаны на долговечность и автоматическое пересоединение. Несколько потоков могут использовать одно соединение одновременно.
В этом случае я бы не стал создавать пул. Redis является однопоточным в любом случае & Причина, по которой в других библиотеках, таких как jedis
, вы хотите использовать пул, потому что их соединения не являются потокобезопасными.
Как автор салата указывает в комментариях, есть случаи, когда вы должны даже использовать несколько соединений. Кроме того, из той же документации связана выше:
Вы можете использовать блокирующие вызовы, такие как BLPOP
, BRPOP
, ... чтобы не блокировать все соединения. После того, как соединение блокируется с помощью блокирующего команды, он будет оставаться в этом состоянии до тех пор, Redis не реагирует с результатом
Эти команды не блокируют один поток REDIS', они ждут от определенных событий, чтобы случиться (например, элементов, получающих добавлен в список). Таким образом, вы можете & взаимодействовать с Redis в другом соединении. Не делать этого должно только замедлить вас - НО: Если вы единственный клиент, и вы планируете записывать данные, которые заставляют это событие зайти в тупик, если вы также хотите что-то прочитать перед письмом.
Вы используете сделки (MULTI/EXEC
). Транзакции будут переключать ваше соединение в транзакционном состоянии. Другие потоки, которые разделяют соединение, будут непреднамеренно входить в транзакцию.
В этом случае вы в основном должны использовать несколько соединений, поскольку это влияет на правильность вашего кода. Вы вдруг получаете null
значения, возвращаемые во время transactions, которые не означают, что значения не сохранено. И даже если вы не проверите возвращаемые значения, ваши изменения могут быть отменены без вашего уведомления.
возможно c) весь пул соединений, которые остаются открытыми. Узкая область действия = много времени, потерянного во время установления соединения. – zapl
@zapl. Ваш комментарий заставил меня найти интерфейс пула в библиотеке, которую я использую. Благодарю. Я бы принял ваш ответ, если вы разместите его. – sargas