0

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」として返されます。

さらに情報を追加する

2回目の試行で値を確認すると、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 です

4

1 に答える 1

0

redis.set を呼び出すのは間違っていると思います:

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

キー (「値」の値) の値を 'nx' に設定し、ttl を「60」にします。次にそれを増加させると、整数ではないため、結果は 1 になり、ttl は「60 未満」になります。 "、ttl が 1 未満の場合、キーが失われています。これが表示されます。

ドキュメントを参照してください: http://redis.io/commands/set

redis データベースで redis-cli コマンド ツールを使用してコマンドを手動で実行し、何が起こるかを確認することをお勧めします。

于 2016-06-01T02:58:51.373 に答える