Node-redis: Создание клиента Redis с использованием объекта параметров без хоста и порта.

Созданный на 16 мар. 2019  ·  18Комментарии  ·  Источник: NodeRedis/node-redis

Этот код работает без ошибок, даже если нет запущенного локального сервера. Это правильное поведение или ошибка?

const redis = require('redis')
const redisClient = redis.createClient({ retry_strategy: () => 1000 })
  • Версия : 2.8.0
  • Платформа : Node.js 10.15.3 Mac OS X Mojave, Node.js 11 alpine, Node.js 10.15.3 alpine
  • Описание : Создание клиента Redis с использованием объекта параметров без хоста и порта.
Evaluating

Все 18 Комментарий

@mikhailsidorov - Да, это правильно, так как по умолчанию используются параметры localhost и 6379 соответственно.

О, но вы утверждаете, что локальный сервер Redis не работает? хахаха
Это было бы невероятно странно.

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

Просмотреть все запущенные экземпляры Redis
ps -aux | grep redis-server

Убить все экземпляры Redis
killall redis-server

Закрыть билет?

Я запустил его в докере, без редиса. Позвольте мне еще раз проверить.

Redis должен где-то работать, я пробовал это в своей среде и запустил /etc/init.d/redis-server stop . В первый раз это произошло именно так, как вы упомянули, потому что я был сбит с толку! Затем я запустил ps -aux | grep redis-server обнаружил, что у меня семь экземпляров Redis работают в фоновом режиме, лол. После уничтожения всех, node redis сразу же выдает ошибку, как и ожидалось.

@mikhailsidorov - Да, это правильно, так как по умолчанию используются параметры localhost и 6379 соответственно.

О, но вы утверждаете, что локальный сервер Redis не работает? хахаха
Это было бы невероятно странно.

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

Просмотреть все запущенные экземпляры Redis
ps -aux | grep redis-server

Убить все экземпляры Redis
killall redis-server

Закрыть билет?

На моей машине и в контейнере докеров нет процессов redis-server. Кроме того, у меня нет ни одного процесса, который прослушивает порт 6379 ( netstat -an | grep 6379 ничего не возвращает).

Redis должен где-то работать, я пробовал это в своей среде и запустил /etc/init.d/redis-server stop . В первый раз это произошло именно так, как вы упомянули, потому что я был сбит с толку! Затем я запустил ps -aux | grep redis-server обнаружил, что у меня семь экземпляров Redis работают в фоновом режиме, лол. После уничтожения всех, node redis сразу же выдает ошибку, как и ожидалось.

Я не нашел ни одного запущенного процесса redis-server.

Я подготовил пример воспроизведения проблемы, см. Это репо https://github.com/mikhailsidorov/redis-issue
Этот код работает без ошибок, и у меня не запускались процессы redis-server на тестируемой машине и в контейнере докеров.

Вы случайно не запускаете redis-mock или что-то подобное? (Сомневаюсь, просто проверяю ...)
https://github.com/faeldt/redis-mock

Вот ошибка, которую я получаю, когда выключаю Redis и запускаю свое приложение ... (Это не приложение для докеров, которое вы предоставили). Мне нужно настроить докер, я все еще не использую докер, мне нужно идти в ногу со временем. Попробую чуть позже ....

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

Вы случайно не запускаете redis-mock или что-то подобное? (Сомневаюсь, просто проверяю ...)
https://github.com/faeldt/redis-mock

Вот ошибка, которую я получаю, когда выключаю Redis и запускаю свое приложение ... (Это не приложение для докеров, которое вы предоставили). Мне нужно настроить докер, я все еще не использую докер, мне нужно идти в ногу со временем. Попробую чуть позже ....

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

Нет, я не использую redis-mock. Когда я запускаю const redisClient = redis.createClient() без параметров, у меня такая же ошибка, но когда я передаю { retry_strategy: () => 1000 } я получаю эту проблему.

о, ладно, думаю, теперь мы на одной волне ...

Да, код повторного подключения / повторного подключения node_redis кажется полностью заблокированным на данный момент, существует множество открытых тикетов, относящихся к этим проблемам. Сегодня вечером мне прислали PR-запросы по другим модулям nodeJS, я постараюсь погрузиться в это и отправить действительный PR, когда смогу.

о, ладно, думаю, теперь мы на одной волне ...

Да, код повторного подключения / повторного подключения node_redis кажется полностью заблокированным на данный момент, существует множество открытых тикетов, относящихся к этим проблемам. Сегодня вечером мне прислали PR-запросы по другим модулям nodeJS, я постараюсь погрузиться в это и отправить действительный PR, когда смогу.

Спасибо

Это сделано намеренно. Отметьте connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

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

Это сделано намеренно. Отметьте connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

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

Спасибо тебе за пояснение.

@mikhailsidorov - закрытый вопрос?

@knoxcard Я хотел бы оставить это открытым для себя, чтобы изучить это еще раз, когда у меня будет время.

@knoxcard, кстати, спасибо, что рассмотрели пару вопросов! Вы заинтересованы в большей помощи?

@BridgeAR - абсолютно! как мне еще помочь?

@mikhailsidorov - закрытый вопрос?

Конечно, если понадобится. Спасибо

@mikhailsidorov - не

Была ли эта страница полезной?
0 / 5 - 0 рейтинги