2016-05-31 51 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命令工具手動運行該命令,看看會發生什麼。