Node-redis: Creando el cliente redis usando el objeto de opciones sin host ni puerto.

Creado en 16 mar. 2019  ·  18Comentarios  ·  Fuente: NodeRedis/node-redis

Este código se ejecuta sin errores, incluso si no hay un servidor local en ejecución. ¿Es un comportamiento correcto o un error?

const redis = require('redis')
const redisClient = redis.createClient({ retry_strategy: () => 1000 })
  • Versión : 2.8.
  • Plataforma : Node.js 10.15.3 Mac OS X Mojave, Node.js 11 alpine, Node.js 10.15.3 alpine
  • Descripción : Creando el cliente redis usando el objeto de opciones sin host ni puerto.
Evaluating

Todos 18 comentarios

@mikhailsidorov - Sí, esto es correcto, ya que las opciones predeterminadas son 'localhost' y 6379 respectivamente.

Oh, pero ¿estás diciendo que no hay un servidor Redis local en ejecución? jajaja
Eso sería increíblemente extraño.

Le garantizo que todavía tiene una instancia de Redis en ejecución ... vaya a su consola de línea de comandos de Linux.

Ver todas las instancias en ejecución de Redis
ps -aux | grep redis-server

Mata todas las instancias de Redis
killall redis-server

Cerrar ticket?

Lo ejecuté en la ventana acoplable, sin redis. Dejame revisar otra vez.

Redis tiene que estar ejecutándose en algún lugar, lo probé en mi entorno y ejecuté /etc/init.d/redis-server stop . La primera vez que hizo exactamente lo que mencionaste, ¡estaba desconcertado! Luego ejecuté ps -aux | grep redis-server descubrí que tenía siete instancias de Redis ejecutándose en segundo plano, jajaja. Después de matar a todos, el nodo redis generó errores inmediatamente como se esperaba.

@mikhailsidorov - Sí, esto es correcto, ya que las opciones predeterminadas son 'localhost' y 6379 respectivamente.

Oh, pero ¿estás diciendo que no hay un servidor Redis local en ejecución? jajaja
Eso sería increíblemente extraño.

Le garantizo que todavía tiene una instancia de Redis en ejecución ... vaya a su consola de línea de comandos de Linux.

Ver todas las instancias en ejecución de Redis
ps -aux | grep redis-server

Mata todas las instancias de Redis
killall redis-server

Cerrar ticket?

No hay procesos de redis-server en mi máquina y en el contenedor de la ventana acoplable. Además, no tengo ningún proceso que escuche el puerto 6379 ( netstat -an | grep 6379 no devuelve nada).

Redis tiene que estar ejecutándose en algún lugar, lo probé en mi entorno y ejecuté /etc/init.d/redis-server stop . La primera vez que hizo exactamente lo que mencionaste, ¡estaba desconcertado! Luego ejecuté ps -aux | grep redis-server descubrí que tenía siete instancias de Redis ejecutándose en segundo plano, jajaja. Después de matar a todos, el nodo redis generó errores inmediatamente como se esperaba.

No encontré ningún proceso del servidor redis en ejecución.

Preparé un ejemplo para reproducir el problema, consulte este repositorio https://github.com/mikhailsidorov/redis-issue
Este código se ejecuta sin errores, y no he ejecutado procesos de redis-server en la máquina probada y en el contenedor de la ventana acoplable.

¿Por casualidad está ejecutando redis-mock o algo similar? (Lo dudo, solo comprobando ...)
https://github.com/faeldt/redis-mock

Aquí está el error que recibo cuando apago Redis y ejecuto mi aplicación ... (Esta no es la aplicación de la ventana acoplable que proporcionó) Necesito configurar la ventana acoplable, todavía no estoy usando la ventana acoplable, tengo que cumplir con los tiempos. Lo intentaré un poco más tarde ...

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)

¿Por casualidad está ejecutando redis-mock o algo similar? (Lo dudo, solo comprobando ...)
https://github.com/faeldt/redis-mock

Aquí está el error que recibo cuando apago Redis y ejecuto mi aplicación ... (Esta no es la aplicación de la ventana acoplable que proporcionó) Necesito configurar la ventana acoplable, todavía no estoy usando la ventana acoplable, tengo que cumplir con los tiempos. Lo intentaré un poco más tarde ...

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)

No, no uso redis-mock. Cuando ejecuto const redisClient = redis.createClient() sin opciones, tengo el mismo error, pero cuando paso { retry_strategy: () => 1000 } obtengo este problema.

oh está bien, creo que ahora estamos en la misma página ...

Sí, el código de reintento de conexión / reconexión de node_redis parece completamente roto en este momento, hay numerosos tickets abiertos que se refieren a estos problemas. Esta noche me envían solicitudes de relaciones públicas en otros módulos de nodeJS, intentaré sumergirme en esto y enviar una PR válida cuando pueda.

oh está bien, creo que ahora estamos en la misma página ...

Sí, el código de reintento de conexión / reconexión de node_redis parece completamente roto en este momento, hay numerosos tickets abiertos que se refieren a estos problemas. Esta noche me envían solicitudes de relaciones públicas en otros módulos de nodeJS, intentaré sumergirme en esto y enviar una PR válida cuando pueda.

Gracias

Esto es algo intencional. Cheque connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

La intención es tener una función muy poderosa donde toda la lógica de reconexión esté en manos del usuario. Sin embargo, puede que no siempre sea lo ideal.

Esto es algo intencional. Cheque connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

La intención es tener una función muy poderosa donde toda la lógica de reconexión esté en manos del usuario. Sin embargo, puede que no siempre sea lo ideal.

Gracias por la aclaración.

@mikhailsidorov - ¿problema cerrado?

@knoxcard Me gustaría mantener esto abierto para mí para volver a investigarlo cuando encuentre algo de tiempo.

@knoxcard, ¡ gracias por investigar un par de problemas aquí por cierto! ¿Está interesado en ayudar más en general?

@BridgeAR - ¡absolutamente! ¿cómo debería ayudar más?

@mikhailsidorov - ¿problema cerrado?

Claro, si es necesario. Gracias

@mikhailsidorov - no importa cerrar el problema, BridgeAr quiere mantener este problema abierto, ¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones