是否可以使用带有lrange的多个键?

时间:2017-07-06 20:28:36

标签: node.js redis

我想在同一个网页上列出两组不同的消息,但我一直没有这样做。

如果我只想列出如下所示的一组消息,这很容易。

router.get("/index", function(req, res) {
  redisClient.lrange('chat:messages', 0, -1, function(err, messages) {
    if (err) {
      console.log(err);
    } else {
      var message_list = [];
      messages.forEach(function(message, i) {
        message_list.push(message);
      });
      res.render("index", { messages: message_list });
    }
  });
});

但是,我想列出两组消息,所以我真正想做的就是如下。

router.get("/index", function(req, res) {
  redisClient.lrange(['chat:messages1', 'chat:messages2'], 0, -1, function(err, messages) {
    if (err) {
      console.log(err);
    } else {
      var message_list1 = [];
      var message_list2 = [];
      messages[0].forEach(function(message, i) {
        message_list1.push(message);
      });
      messages[1].forEach(function(message, i) {
        message_list2.push(message);
      });
      res.render("index", { messages1: message_list1, messages2: message_list2 });
    }
  });
});

此代码不起作用,但我希望我能够让您知道我想要做什么。

是否可以在同一页面上列出两组消息?

如果是这样,我应该如何调整我的代码才能使其正常工作?

1 个答案:

答案 0 :(得分:2)

lrange命令只接受一个键加索引。使用多块重写逻辑是否合理:

 redisClient.multi()
     .lrange('chat:messages1', 0, -1)
     .lrange('chat:messages2', 0, -1)
     .exec(function (err, replies) {
         replies.forEach(function (reply, index) {
            // do your computation
     });