2014-09-21 59 views
0

我在使用Redis作为其主数据库的Node.js中开发一个应用程序,并在Redis不可用时回退到MySQL。Node.js/Redis - 等待连接?

我遇到的问题是,与node-mysql,node_redis不同的是,它不接受createClient()方法的回调函数,它只是在发生错误时发出错误。

我该如何构建我的代码来处理这个问题?

我需要的是基本上是这样的(伪代码):

if can_connect_on_redis 
    use_redis 
else 
    if can_connect_mysql 
     use_mysql 
    else 
     fail 
    end 
end 

回答

2

未经测试:

var client = redis.createClient(); 
var isReady = false; 
var isError = false; 

client.on('error', function() { 
    if (! isReady && ! isError) { 
    // perform your MySQL setup here 
    } 
    isError = true; 
}).on('ready', function() { 
    isReady = true; 
}); 

的想法是,当你得到一个错误之前的客户端是准备好了,你可以假设与Redis的连接失败,您可以重新使用MySQL。因为客户端会尝试重新连接,所以会继续产生错误事件,因此会产生警戒。

如果您想在客户端(成功)能够建立连接(例如,Redis服务器停止时)后回退MySQL,则可以删除isReady逻辑。

+0

谢谢!你的代码工作正常,我只是添加了一些逻辑来检查连接尝试的次数,一旦它命中3我调用client.end()停止尝试和使用MySQL – Schrute 2014-09-21 18:07:36