javascript - Node 和 Redis : Redis Clients

标签 javascript performance api node.js redis

假设您在 Redis 中有 多个 db,您希望从中插入和/或删除数据。你有这样的流程;

  • 将数据插入到 DB #1
  • 在第一次插入的回调之后做一些事情并将数据插入到DB #2
  • 在第二次插入的回调之后再次做一些事情,最后将数据插入到DB #3

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

redisClient = redis.createClient();

在选择新数据库时,我使用 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 使用 单独的 redisClients 会有多合理。所以它会像;

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, Node 将为每个 Node 进程打开 3 个(且仅 3 个)连接。


注意将它们全部放在一个 Node 模块中也是一个好主意:

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连接(因为 Node 缓存了require调用):

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

然后当 require('./lib/my_redis').DB1.set('key','val') 将在您的任何模块中调用 DB1 将已经初始化。

关于javascript - Node 和 Redis : Redis Clients,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13971145/

相关文章:

javascript - g:submitButton- onclick不起作用

javascript - 如何发送多个文件到Github?

performance - PostgreSQL 9.2 - Agg 查询速度慢,计数(distinct x)

api - Stripe 中 payment(py_) API 文档在哪里?

java - Salesforce SOAP api 客户端 ID

java - 在 Spring MVC 中从 JS/jQuery/Ajax 进行 ActionRequest 调用

javascript - highcharts 错误 : <rect> attribute width: Expected length, "NaN"

python - 获取具有任何所需值的组

Windows Azure 上的 ASP.NET 应用程序性能问题

api - 如何获取YouTube视频的位置坐标?