2016-05-31 50 views
0

我有以下设置来设置和从上面从Redis的无法获得Redis的数据,但可以写信给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 = NULL数据= 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

+0

你需要提供更多的细节。使用'redis-cli'会发生什么,它工作正常吗?你在'data'中获得了什么值?你确定'node-redis'会返回整数0吗?它可能与'cli'不同。 – Russbear

+0

@Russbear对不起,我没有使用node-redis,使用ioredis并使用redis-cli,它的返回值为1 – RRP

+0

您需要提供更多关于从err和data获得的值的信息, CLI正在给你,你的'ioredis'配置是什么样的。 – Russbear

回答

0

我想,你们正好错了调用redis.set:

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

将ttl“60”的值(“value”的值)设置为'nx',下次创建它时,因为它不是整数,结果为1,ttl较少比“60”,如果ttl小于1,钥匙不见了,这就是你所看到的。

见机制的文档:http://redis.io/commands/set

推荐给对您的Redis数据库Redis的-CLI命令工具手动运行该命令,看看会发生什么。