【问题标题】:NodeJS nested Redis commandsNodeJS 嵌套 Redis 命令
【发布时间】:2016-12-07 22:22:09
【问题描述】:

我对这个东西很陌生,但经过几次尝试,我想在这里向你寻求帮助,因为我不确定我到底做错了什么。

情况:在 Redis 数据库中,我得到了一个键 test,其值类似于 1,2,3,4。要将新值放入键中,我使用rpush,因为我想在键的末尾添加新值(并且当我独立运行这个时,它就像一个魅力):

client.rpush("test", "5");

但是,我的想法是,首先我想检查一下,如果密钥存在,如果不存在,那么我将在其中添加一个值。为此我决定使用 LRANGE 命令,现在结果如下所示:

client.lrange("test", 0, 0, function(err, reply) {
        if (reply.length === 0) {
            client.rpush("test", 5);
        }

问题是,在上述情况下,rpush 似乎被“忽略”,它不会存储该值。我究竟做错了什么?看起来lrange 回调中的任何 Redis 命令都被忽略了。

【问题讨论】:

  • reply的实际值是多少?

标签: node.js redis


【解决方案1】:

听起来您可能想要使用LLEN 而不是LRANGE

https://redis.io/commands/llen

我不是节点人,但这样的事情应该可以工作。不过,您的示例 应该 可以工作,如果这不能解决问题,我会继续更新您的描述以包含一些日志记录。

client.llen('test', function(err, reply) {  
  if (err) {
     // Log error
  }
  // Log reply 
  if (reply === 0) { 
    client.rpush('test', 5, function(err, reply) {
      if (err) {
         // Log error
      } 
      // Log reply
    })
  } 
})

【讨论】:

  • 感谢您的提示。我看到的第一件事是,你使用rpush 作为异步函数(纠正我,如果我错了)。其次 - 我使用lrange 的原因很简单。想象一下你有冰淇淋车,人们在排队等候香草或巧克力。因此,您必须键入 vanillachocolate,然后将人员添加到队列中。如果没有人在等待,您将在队列中添加一个新名称。如果有人在等,您将提供冰淇淋 (client.lpop('vanilla'))。我希望这是有道理的。我会回来,如果它仍然不起作用,谢谢!
  • 回调当然是可选的。根据您的描述,您正在使用 lrange 来确定 key 是否存在。虽然这应该有效,但llen 是获得该结果的更有效方式。无论如何,如果您需要进一步的帮助,我会要求您在描述中提供一些额外的日志信息,以便我们更好地帮助您解决根本问题。
  • 同时,我意识到我掉进了异步陷阱。在应用程序运行时,我在代码中的错误位置调用了client.quit。现在它按设计工作了,谢谢!
猜你喜欢
  • 2019-04-05
  • 1970-01-01
  • 2014-07-06
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多