1

現在、2 つの並べ替えられたセットがあり、1 つのセットからすべてのスコアとメンバーを取得し、それを使用して他のセットからメンバーを削除しようとしています。私が使用しているモジュールは node_redis です。

現在client.zrange()、応答を呼び出して配列に保存することで、メンバーとスコアを取得しようとしています。

返信が配列形式であると仮定するのは正しいですか? redis apiが「複数一括返信」を返すと言っていることに気づきましたが、それは正確にはどういう意味ですか?配列でない場合、どのように使用しますか?

また、別の質問があります。それは、使用するときに配列を使用できzadd()ますか? 例はこのようになります。

client.zadd(historyKey, scores, members, function(err, reply){});

スコアとメンバーは配列です。

編集:

SNMP トラップの受信と解析に取り組んでいます。基本的にトラップを受信し、そのアラーム タイプを確認します。これらのトラップで役立つ情報は、アラーム タイプと完全なトラップ名です。アラームが 0、1、2 のいずれであるかを確認します。

1 の場合は、受け取った unix 時に現在のソート済みセットに格納します。0 または 2 の場合、そのタイプのアラームが完了していることがわかります。現在のセットからそのようなすべてのトラップを削除し、受信したばかりのトラップと一緒に履歴セットに入れる必要があります。

Current からトラップを削除して History に入れるには、Current セットのどこにトラップが配置されるかを追跡するために、個々のトラップごとに個別のセットを作成する必要がありました。

つまり、トラップ「RGB Gamut Error( ----Bb )」を 1346276537 で受信して Current に保存すると、正確なスコアとメンバーもキー「IPAddress:RGB Gamut Error」を使用して別のセットに保存されます。

そうすれば、「RGB Gamut Error」という名前のアラーム タイプ 0 または 2 を受信したときに、その前に IP アドレスを追加し、zrangeそのセットを実行してから、履歴に追加し、現在から削除することができます。最後に、「IPAddress:RGB Gamut Error」セットを削除して、最初からやり直します。

補足: 私のメンバーは、実際には、各メンバーを一意にし、互いに上書きしないようにするために、末尾に 2 つの番号が追加されています。これは本当に唯一の目的です。

例: IPAdress::RGB Gamut Error( Rr--Bb ):5:46

4

1 に答える 1

1

応答が配列形式であると想定するのは正しいですか?

はい、配列としてnode_redisからの応答を返します。zrange

また、別の質問があります。それは、zadd()を使用するときに配列を使用できますか?例は次のようになります。

いいえ。redis2.4より前は、一度に送信できるパラメータは1つだけでした(so zadd key score member)。redis 2.4以降zadd(および他の多くのコマンド)は可変個引数です。つまり、任意の数のパラメーターを受け入れますが、配列としては受け入れません。あなたはまだそれをこのように呼ぶ必要があります:

client.zadd(key, score1, member1, score2, member2, ..., function(err, reply){});

.applyいくつかのトリックを行うこともできますが、最初にscoresmembers配列を1つの配列に圧縮する必要があります。

アップデート:

すでに配列がある場合は、次のようにそれらを1つscoresmembers配列にマージできます。

var scores = [1, 2, 3],
    members = ['a', 'b', 'c'];

function merge (other) {
  return function (result, current, index) {
    result.push(current, other[index]);
    return result;
  }
}

var merged = scores.reduce(merge(members), []);

// Now merged = [1, 'a', 2, 'b', 3, 'c'];

var args = [key].concat(merged).concat(function(err, reply){});

client.zadd.apply(client, args);
于 2012-08-29T09:39:31.430 に答える