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