Не могу получить данные 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 и data = 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 мой мастер

1 ответ

Я думаю, что вы просто неправильно называете redis.set:

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

Вы устанавливаете значение ключа (значение "value") в 'nx', используя ttl "60", в следующий раз, когда вы его увеличиваете, потому что это не целое число, результат равен 1, а ttl меньше "60 ", если ttl меньше 1, ключ пропал, это то, что вы видите.

Смотрите документацию: http://redis.io/commands/set

Предложите запустить команду вручную с помощью команды redis-cli в вашей базе данных redis и посмотрите, что произойдет.

Другие вопросы по тегам