JavaScript – Node&Redis:Redis客户端

假设您在Redis中有多个db要插入和/或从中删除数据。你有流动像

  >将数据插入DB#1
  >第一次插入回调后,做一些事情并将数据插入DB#2
  >第二次插入回调后,再次执行一些操作,最后将数据插入DB#3

我使用一个名为redisClient的变量,基本上是创建的;

redisClient = redis.createClient();

而在选择一个新的数据库时,我使用select命令和额外的预警回调,所以我的select命令就像;

redisClient.select(1, function(err) {
  //Some programming logic (Insertion, deletion and stuff)
  redisClient.select(2, function(err) {
    //Do some additional programming logic (Insertion, deletion and stuff)
  }
});

不过事情不断混合。我想要注意的是,redisClient变量只被分配一次,并在以后在整个应用程序中被使用。现在我想知道,对于Redis中的每个DB,使用单独的redisClient是多么合理。所以会是这样的

redisClientForDB1 = redis.createClient();
redisClientForDB2 = redis.createClient();
redisClientForDB3 = redis.createClient();

我想知道这是否合理,或者将是一种每秒将接收4K请求并即将进入生产模式的应用程序的正确方法。这个模型可能面临什么问题?

就像Carl Zulauf said,最好打开3个不同的连接(每个DB一个):

redisClient = {
  DB1: redis.createClient(),
  DB2: redis.createClient(),
  DB3: redis.createClient()
};

最好在服务器初始化期间打开所有连接一次:

async.parallel([
  DB1.select.bind(DB1, 1),
  DB2.select.bind(DB2, 2),
  DB3.select.bind(DB3, 3)
], next);

因此,在创建redisClient对象并初始化之后,可以使用它来处理所有的redis操作。

如果您将使用redis,则节点将在每个节点进程打开3个(且仅3个)连接。

注:将其全部放入一个节点模块也是一个好主意:

module.exports = {
  DB1: redis.createClient(),
  DB2: redis.createClient(),
  DB3: redis.createClient(),
  init: function(next) {
    var select = redis.RedisClient.prototype.select;
    require('async').parallel([
      select.bind(this.DB1, 1),
      select.bind(this.DB2, 2),
      select.bind(this.DB3, 3)
    ], next);
  }
};

然后,您可以通过调用init函数初始化所有的redis连接(因为节点缓存需要调用):

require('./lib/my_redis').init(function(err) {
  if (err) throw err;
  server.listen();
});

然后当require(‘./ lib / my_redis’)。DB1.set(‘key’,’val’)将被调用在任何模块中,DB1将被初始化。

翻译自:https://stackoverflow.com/questions/13971145/node-redis-redis-clients

转载注明原文:JavaScript – Node&Redis:Redis客户端