Node-redis: 尝试Redis服务器是否正在运行

创建于 2011-10-16  ·  3评论  ·  资料来源: NodeRedis/node-redis

我有一个从Ubuntu的upstart启动时启动的node.js服务器。 由于node.js服务器是在Redis启动并运行之前启动的,因此redis.createClient()引发异常:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Redis connection to 127.0.0.1:6379 failed - ECONNREFUSED, Connection refused
    at Socket.<anonymous> (/var/www/php-jobs/node_modules/redis/index.js:88:28)
    at Socket.emit (events.js:64:17)
    at Array.<anonymous> (net.js:830:27)
    at EventEmitter._tickCallback (node.js:126:26)

当然,我尝试将其包装在try / catch语句中。 我的服务器的启动:

var redis  = require("redis");

function initializeRedis(callback) {
    (function createClient(){
        var client;
        try {
            client = redis.createClient();
        } catch (e) {
            setTimeout(createClient, 1000);
        }
        callback(client);
    })();
};

initializeRedis(function(client) {
  // Do things with client
});

但是,这没有什么区别,我仍然有一个例外。 可能是什么情况,如何确保服务器在Redis出现之前等待?

question

最有用的评论

const client = redis.createClient({
主机:process.env.redis_hostname,
端口:process.env.redis_port
})
client.on('error',(error)=> {
logger.error(error.message);
})
client.on('connect',()=> {
logger.info('已成功连接到Redis');
})

image
因此,这将继续轮询以连接到Redis服务器,并且在找到连接时它将自动连接。 感谢@mranney快速解决方案

所有3条评论

之所以发生这种情况,是因为客户端发出了“错误”事件。 在节点中,名为“错误”的事件是特殊的。 如果您不听他们的话,它们会被转换成异常。 因此,在客户端上获取“错误”的侦听器,您就不会崩溃。 我们会在连接被拒绝时自动重试,因此一旦您侦听错误,此方法便会自动解决。

我将重新处理重新连接和错误的处理方式,因为这种非常常见的情况最终会使很多人感到困惑。

有没有任何处理! 我正在尝试在try catch块中捕获错误。 但是,它不起作用。

const client = redis.createClient({
主机:process.env.redis_hostname,
端口:process.env.redis_port
})
client.on('error',(error)=> {
logger.error(error.message);
})
client.on('connect',()=> {
logger.info('已成功连接到Redis');
})

image
因此,这将继续轮询以连接到Redis服务器,并且在找到连接时它将自动连接。 感谢@mranney快速解决方案

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

aletorrado picture aletorrado  ·  6评论

Atala picture Atala  ·  3评论

b96705008 picture b96705008  ·  7评论

strumwolf picture strumwolf  ·  4评论

Stono picture Stono  ·  6评论