node help node.js redis node-redis

node.js - help - redis subscribe node



La conexión de Redis ha pasado de un evento cerrado (2)

En nuestra configuración de redis, hemos establecido el tiempo de espera: 7 segundos

En node_redis manejamos la conexión de redis listo y el evento final como

client.on("ready", function() { logger.info("Connection Successfully Established to ", this.host, this.port); } client.on("end", function() { logger.fatal("Connection Terminated to ", this.host, this.port); }

Registro de muestra

[2012-07-11 08: 21: 29.545] [FATAL] Producción - Conexión finalizada en ''xxx9'' ''6399''
[2012-07-11 08: 21: 29.803] [INFO] Producción - Conexión establecida exitosamente en ''xxx9'' ''6399''

Pero en algunos casos (lo más probable es que Redis cierre la conexión sin notificar al cliente) vemos que la cola de comandos se acumula y las solicitudes tardan demasiado en obtenerse la respuesta [hasta que el cliente nodo-redis pueda detectar el evento cerrado ] En todos los casos, la devolución de llamada del comando se devuelve con este error. La Redis connection gone from close event . incluso después de tanta espera. Parece que esto no es un problema debido al tiempo de espera ya que el evento final habitual no se activó.

El problema parece ser similar a este: http://code.google.com/p/redis/issues/detail?id=368

¿Esto es algo que está sucediendo en redis?

¿Hay alguna manera de especificar que la ejecución de un comando [enviar y recibir una respuesta] no debe exceder el umbral y responder con un error en ese caso, en lugar de hacer que el cliente se detenga?

¿O hay alguna otra forma de activar un evento cercano en casos como socket_timeout?

¿O deberíamos verificar algo de nuestro lado redis? Controlamos nuestro registro de redis en el nivel de debug y no encontramos nada útil relacionado con este problema

Cuando ejecutamos el nodo redis en el modo de depuración, podemos ver claramente que el cliente se paraliza con las solicitudes acumuladas en la cola de comandos. Registramos el por qué y la longitud de la cola dentro de la función flush_on_error . Hemos mantenido offline_queuing deshabilitado.

Registro de muestra

La conexión de Redis ha desaparecido del evento cercano. cola fuera de línea 0 cola de comandos 8

Tiempo de respuesta de una solicitud fallida: 30388 ms [esto varía según la espera en la cola de comandos. El primer tipo en cola tiene el tiempo máximo de respuesta y los que lo siguen son menores]

Tiempo de resonancia habitual: 1 ms

PD: Hemos archivado un problema en node_redis también


Tuvimos un montón de problemas de conexión con Redis también. Parece que cerraría la conexión sin decirle al cliente. Notamos que posiblemente fue un problema de tiempo de espera en el servidor. Esta es la solución que usamos y no hemos tenido ningún problema desde julio.

var RETRY_EVERY = 1000 * 60 * 3; var startTimer = function(){ console.log(''Begin the hot tub!'') setInterval(function(){ try{ client.set(''hot'',new Date()); console.log(client.get(''hot'')) } catch(e){ console.log(e); } },RETRY_EVERY) }();

Teniendo en cuenta que es solo una llamada cada 3 minutos, no debería ser un problema para el rendimiento;)


Con respecto a la respuesta de oconnecp, ¿no puedes hacer lo siguiente?

setInterval(client.ping(), 1000 * 60 * 30);