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