【问题标题】:Can't get redis data, but can write to redis无法获取redis数据,但可以写入redis
【发布时间】:2016-06-01 11:09:23
【问题描述】:

我有以下设置来设置和检查 redis 中的值

var ttl = '60';

function someRandom(value, callback){

   client.exists(value, function check(err, data){
      if(data === 0){
         //do functionality
         client.set(value,'nx','ex',ttl, function(err,data){
           callback(null);
         });

      }else{
        client.incr(value);
        callback(null);
      }
   })

}

现在从上面看,设置值没有问题。根据exists 函数,如果值存在,则返回“1”,否则返回“0”。但是当我在 redis 中检查类似的值时,它已经存在时返回为“0”。

添加更多信息

当我第二次尝试检查该值时,err=nulldata=0,当它应该是“1”时,因为该值已经存在。

同样使用 redis-cli 命令返回 1

ioredis 配置如下所示

db0: new Redis({
    sentinels: endpoints,
    name: REDIS_SENTINEL_MASTER_NAME,
    db: 0
}),

db1: new Redis({
    sentinels: endpoints,
    name: REDIS_SENTINEL_MASTER_NAME,
    db: 1
}),


sub: new Redis({
    sentinels: endpoints,
    name: REDIS_SENTINEL_MASTER_NAME,
    db: 0
}),

pub: new Redis({
    sentinels: endpoints,
    name: REDIS_SENTINEL_MASTER_NAME,
    db: 0
})

其中 senitelname 是 mymaster

【问题讨论】:

  • 您需要提供更多细节。使用redis-cli 会发生什么,它工作正常吗?你在data 中得到什么值?你确定node-redis 会返回整数 0 吗?它可能与cli 不同。
  • @Russbear 抱歉,我没有使用 node-redis,使用 ioredis 并使用 redis-cli 它的密钥返回 1
  • 您需要提供更多信息,说明您从 errdata 获得的值、CLI 为您提供了什么以及您的 ioredis 配置是什么样的。跨度>
  • @Russbear 我在原帖中有更多信息
  • @Russbear 我实际上发现了问题所在,这是将值传递给 redis 方法的方式

标签: node.js redis ioredis


【解决方案1】:

我认为你调用 redis.set 是错误的:

client.set(value,'nx','ex',ttl, function(err,data){
    callback(null);
});

你把key("value"的值)的value设置为'nx',ttl为“60”,下次你incr它,因为不是整数,结果是1,ttl小于大于“60”,如果 ttl 小于 1,key 就没有了,这就是你看到的。

查看文档:http://redis.io/commands/set

建议在你的redis数据库上使用redis-cli命令工具手动运行命令,看看会发生什么。

【讨论】:

    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多