我正在构建一个node.js服务器,使用简单的身份验证在redis数据库中获取uid和key。 我应该在运行服务器时一劳永逸地连接到redis数据库,例如:
var http = require('http'),
express = require('express');
var app = express();
var redis = require('redis'),
redisclient = redis.createClient();
//... redis ready, error, end callback handlers here ...
app.get( '/connect/:uid/:key', function(req,res,next) {
redisclient.hget(req.params.uid,req.params.key, function(err,rep) {
// ... commands here...
});
});
或者我应该在每次连接请求完成时连接,如下所示:
var http = require('http'),
express = require('express');
var app = express();
var redis = require('redis');
app.get( '/connect/:uid/:key', function(req,res,next) {
var redisclient = redis.createClient();
//... redis callback handlers here...
redisclient.hget(req.params.uid,req.params.key, function(err,rep) {
// ... commands here...
});
});
目前我说的是连接数量有限,时间稀少,不担心效率优化。
答案 0 :(得分:0)
你不应该两个都做...理想情况下你应该有一个连接池..让我们说20连接池应该重用。
如果您连接每个请求,那么它的性能不佳以及从应用程序到redis的许多TCP连接都将处于TIMEWAIT状态,即使您关闭它们也是如此。
如果你只有一个连接,那就像你在一条单车道的道路上驾驶汽车一样,网络会变得紧张
我不太确定,但我认为hiredis(节点模块)有连接池......
答案 1 :(得分:0)
我在某些时候也有同样的困惑,但找不到任何好的答案。最后我选择连接一次以减少代码行。 Redis主要遵循单线程设计,因此连接池也不会有太大帮助。