Почему redis pub и sub считаются разными клиентами, если открыто только одно соединение?

Почему даже когда создан только один экземпляр соединения Redis, каждый раз, когда я вызываю публикацию или подписку на этот экземпляр, он считается как другой клиент. Поэтому, когда я подключаюсь к Redis с помощью python

import redis
redis_server = redis.Redis()

он не распознает его как нового клиента. Только когда я позвоню одному из них

redis_server.publish("channel", message) 
redis_server.subscribe("channel")

Я вижу, что подключено 2 клиента. Отдельно ли обрабатываются клиенты pub / sub в Redis? Почему бы не зарегистрировать подключенного клиента при открытом новом подключении?


person ammar    schedule 15.03.2019    source источник
comment
Что значит не признает? Узнай как?   -  person Bailey Parker    schedule 15.03.2019
comment
Скорее всего, клиентская библиотека открывает новое соединение из пула.   -  person Klaus D.    schedule 15.03.2019
comment
Когда я запускаю INFO CLIENTS в redis-cli, он не показывает мне, что есть подключенный клиент, если я запускаю redis_server = redis.Redis (). Однако, когда я запускаю публикацию или подписку, отображается 3 клиента (включая redis-cli)   -  person ammar    schedule 15.03.2019
comment
Ах, это верно только для команды pub / sub или это верно для любой команды?   -  person Bailey Parker    schedule 15.03.2019
comment
Я думаю только для команды pub / sub, так как я также запускаю и устанавливаю, и они не отображаются как клиенты.   -  person ammar    schedule 15.03.2019
comment
Кажется, что он создает новое соединение для каждой команды. Каждый раз, когда он вызывает _execute_comand, он создает новое соединение.   -  person ammar    schedule 15.03.2019


Ответы (1)


По умолчанию redis-py дает вам пул соединений только с максимальным количеством соединений. По первой команде, которую вы введете, будет установлено настоящее соединение, и вы увидите, что оно отображается в CLIENT LIST на сервере.

Всякий раз, когда какая-либо клиентская библиотека для Redis выдает команду подписки, все это соединение занято этим, поэтому redis-py, вероятно, создает отдельное соединение, предназначенное для этого.

Это должно объяснить, почему вы не видите подключенных клиентов, а затем 2. Это не обязательно одно соединение для каждой выданной команды, поскольку соединения в пуле будут использоваться повторно.

person nnog    schedule 20.03.2019