一尘不染

我应该为每个连接创建一个新的Redis客户端吗?

redis

我正在看下面的代码片段:

var addSnippet = function( req, res ) {
  getPostParams( req, function( obj ) {
      var r = redis.createClient();

      r.stream.on( 'connect', function() {
        r.incr( 'nextid' , function( err, id ) {
          r.set( 'snippet:'+id, JSON.stringify( obj ), function() {
            var msg = 'The snippet has been saved at <a href="/'+id+'">'+req.headers.host+'/'+id+'</a>';
            res.respond( msg );
          } );
        } );
      } );
    });
};

从这里:http : //howtonode.org/node-redis-
fun。

我不太了解发生了什么。从示例中,我认为Redis客户端是数据库和程序员之间的某种接口,但现在看来他们正在为每个提交的代码创建一个新客户端(他们在教程中构建的应用程序接受代码段)提交并将其存储在数据库中)!

另外,Redis数据库存储在哪里?与脚本位于同一目录中吗?我该如何改变?

我正在将Redis与Node.js一起使用。


阅读 302

收藏
2020-06-20

共1个答案

一尘不染

嗯,看起来他们正在为每个客户端创建一个Redis连接。绝对不建议这样做。

Redis是一个数据库。就像MySQL。您可以通过客户端访问它,但是它是服务器上运行的程序。数据由它处理,因此您不必担心它在哪里。如果您确实担心,可以查看redis配置。更多信息,请访问:http
//redis.io(该文档非常好)。

要“修复”代码并仅使用一个客户端,您必须像这样使用它:

/**
 * Move this at the top, this way it's not run once per client,
 * it is run once the node program is launched.
 */
var r = redis.createClient();

var addSnippet = function( req, res ) {
  getPostParams( req, function( obj ) {    
      r.stream.on( 'connect', function() {
        r.incr( 'nextid' , function( err, id ) {
          r.set( 'snippet:'+id, JSON.stringify( obj ), function() {
            var msg = 'The snippet has been saved at <a href="/'+id+'">'+req.headers.host+'/'+id+'</a>';
            res.respond( msg );
          } );
        } );
      } );
    });
};
2020-06-20