Node.js服务器:连接到redis数据库一次?还是在每个请求?

时间:2014-01-31 12:12:30

标签: node.js redis webserver database-connection

我正在构建一个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...
      });
   });

目前我说的是连接数量有限,时间稀少,不担心效率优化。

2 个答案:

答案 0 :(得分:0)

你不应该两个都做...理想情况下你应该有一个连接池..让我们说20连接池应该重用。

如果您连接每个请求,那么它的性能不佳以及从应用程序到redis的许多TCP连接都将处于TIMEWAIT状态,即使您关闭它们也是如此。

如果你只有一个连接,那就像你在一条单车道的道路上驾驶汽车一样,网络会变得紧张

我不太确定,但我认为hiredis(节点模块)有连接池......

答案 1 :(得分:0)

我在某些时候也有同样的困惑,但找不到任何好的答案。最后我选择连接一次以减少代码行。 Redis主要遵循单线程设计,因此连接池也不会有太大帮助。