2015-09-29 21 views
5

私は["aaa"、 "bbb"、 "ccc"]のようなキーの配列を持っているので、これらのキーをすべて1つのコマンドでredisから削除します。私はループを使用して反復したい。私は読んでのRedisはDELコマンドや端末のRedis、クライアント上ではなく、nodejsを使用して作品については、それがノードredisを使用してredisでキーの配列を削除

Redisclient.del(tokenKeys,function(err,count){ 
      Logger.info("count is ",count) 
      Logger.error("err is ",err) 

     }) 

動作しないtokenKeys = [「AAA」、「BBB」、「CCC」]、このコードは仕事でどこかの私はtokenKeys = "aaa"のような1つのキーを送信します

+0

あなたの問題を解決できましたか? –

+0

ええ、私たちはそれを解決します – abhaygarg12493

+0

実際には配列を渡す際に問題があります。そうでなければこのコードはうまく動作します – abhaygarg12493

答えて

1

node-redis実際には多くのdelコマンドがあると自動的にパイプライン処理されるので、おそらくもっと効率的ですループ。

また、マルチでこれmoduleを試すことができます。

var redis = require("redis"), 
    client = redis.createClient(); 

client.on("error", function (err) { 
    console.log("Error " + err); 
}); 

client.set("aaa", "aaa"); 
client.set("bbb", "bbb"); 
client.set("ccc", "ccc"); 

var keys = ["aaa", "bbb", "ccc"]; 


client.keys("*", function (err, keys) { 
    keys.forEach(function (key, pos) { 
     console.log(key); 
    }); 
}); 

client.del(keys, function(err, o) { 
}); 

client.keys("*", function (err, keys) { 
    keys.forEach(function (key, pos) { 
     console.log(key); 
    }); 
}); 

を次のように

var redis = require("redis"), 
    client = redis.createClient(), multi; 

client.multi([ 
    ["del", "key1"], 
    ["del", "key2"] 
]).exec(function (err, replies) { 
    console.log(replies); 
}); 
+0

本能的にこれはよく見えます。あなたは、キーの配列をループすることを知っていて、実行するマルチ配列にそれらを追加するだけで、キー自体の配列で.delを呼び出すよりパフォーマンスが良いですか? –

6

あなたはちょうどあなたが上記のコードを実行する場合は、次のような出力

を取得する配列を渡すことができます
$ node index.js 
string key 
hash key 
aaa 
ccc 
bbb 
string key 
hash key 

設定後に印刷されたキーは表示されますが、削除後には印刷されません

2

del機能は、Redis DBクライアントの場合のように直接実装され、 です。 redis.del("aaa","bbb","ccc")は、JavaScriptを適用するアプローチを使用して配列して動作させるために、複数のアイテム

を削除します:

redis.del.apply(redis, ["aaa","bbb","ccc"]) 
2

は確かnode_redisの現在のバージョン(v2.6.5)でのカンマ区切りのリストの両方を削除することが可能ですキーまたはキー配列を使用します。両方のテストを参照してくださいhere

var redis = require("redis"); 
var client = redis.createClient(); 

client.set('foo', 'foo'); 
client.set('apple', 'apple'); 

// Then either 

client.del('foo', 'apple'); 

// Or 

client.del(['foo', 'apple']); 
+0

あなたはそれがどのようにできるかを示さずに可能だと言います。 –

+0

私が共有したリンクは、どのようにしてテストを行うことができるかを示しています。しかし私はこれを明示するために私の答えを更新する予定です。 –

+0

リンクにアクセスできない場合に備えて、外部リンクの関連部分を引用することをお勧めします。 –

関連する問題