我在Node.js中开发一个使用Redis作为其主数据库的应用程序,并在Redis不可用时回退到MySQL。
我遇到的问题是,与node-mysql不同,node_redis不接受createClient()方法的回调,只是在发生错误时才发出错误失败。
如何构建我的代码来处理这个问题?
我需要的基本上是这个(伪代码):
if can_connect_on_redis
use_redis
else
if can_connect_mysql
use_mysql
else
fail
end
end
答案 0 :(得分:3)
未测试:
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。因为客户端将尝试重新连接,所以它将继续生成错误事件,因此isError
保护。
如果您希望在客户端(成功)设置连接后(例如,当Redis服务器停止时)回退到MySQL,则可以删除isReady
逻辑。