2014-01-31 2 views
3

Я строю node.js-сервер с простой аутентификацией, получающей uid и ключ в базе данных redis. Должен ли я подключиться к Redis DB раз и навсегда на запуск сервера, например:Сервер Node.js: подключитесь к базе данных 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

У меня было такое же замешательство в какой-то момент, но я не мог найти никакого хорошего ответа. В конце я выбрал подключение только один раз, чтобы уменьшить количество строк кода. Redis в основном следует за однопоточным дизайном, поэтому объединение пулов также не поможет.

+0

Да, я пойду по твоему пути. Аналогичный вопрос был задан, и он ответил так же, как и вы: http://stackoverflow.com/questions/11009880/should-i-create-a-new-redis-client-for-each-connection – nenj

0

Вы не должны делать то и другое ... В идеале у вас должен быть пул соединений. Предположим, что 20 пулов соединений, которые следует использовать повторно.

Если вы подключаетесь по каждому запросу, то его не очень хорошая производительность, а также много TCP-соединений из вашего приложения для redis будут находиться в статусе TIMEWAIT, даже если вы их закроете.

Если у вас есть только одно соединение, то его, как вы ведете машину по однополосной дороге, где сеть будет получить conjusted

Я не очень уверен, но я думаю, что hiredis (модуль узла) имеет пул соединений ...

+0

Я не очень беспокоюсь о большом количестве подключений, поэтому объединение не потребуется. Спасибо за ваш ответ – nenj

Смежные вопросы