web-dev-qa-db-ja.com

RedisとNode.js:すべてのキー

基本的な質問:Node.jsを使用して、redis dbのすべてのキーを取得したいと思います。私が呼び出すと、私のredis dbは次のようになります キー*;

  1. aXF
  2. x9U
  3. 大丈夫

だから私が持っている各レコードは、ランダムな文字列として生成された一意のキーを持っています。今私は次のようなものを呼び出したいと思います foreach(Redisのキー) そして、redisのすべてのキーを取得します。達成することは可能でしょうか 「SELECT * FROM Redis」のような Node.jsとRedisを使用したクエリ

22
Ali

確かに、redis用のnodejsモジュールをインストールする必要があります。これは にありますhttps://github.com/mranney/node_redis

npm install node_redis

更新

上記のコマンドは使用できなくなりました。次のものを使用できます。

npm install redis

それからあなたはそうするでしょう:

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

client.keys('*', function (err, keys) {
  if (err) return console.log(err);

  for(var i = 0, len = keys.length; i < len; i++) {
    console.log(keys[i]);
  }
});        

一般的に言えば、常にすべてのキーを返す必要はありませんが(大規模なデータセットの場合はパフォーマンスが低下します)、テストするだけで問題は解決します。 Redisのドキュメントにも警告が表示されています:

警告:KEYSは、実稼働環境でのみ細心の注意を払って使用する必要があるコマンドと見なしてください。大規模なデータベースに対して実行すると、パフォーマンスが低下する可能性があります。このコマンドは、デバッグや、キースペースレイアウトの変更などの特別な操作を目的としています。通常のアプリケーションコードではKEYSを使用しないでください。キースペースのサブセットでキーを見つける方法を探している場合は、セットの使用を検討してください。

44
Bill

Nodejs用のredisクライアントをインストールする

npm install redis

次に、すべてのキーのデータを取得するために以下を実行します

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

client.multi()
    .keys('*', function (err, replies) {
        // NOTE: code in this callback is NOT atomic
        // this only happens after the the .exec call finishes.

        console.log("MULTI got " + replies.length + " replies");

        replies.forEach(function (reply, index) {
            console.log("Reply " + index + ": " + reply.toString());
            client.get(reply, function(err, data){
                    console.log(data);
            });
        });

    })
    .exec(function (err, replies) {});
6
Carlos Júlio
npm install node_redis 

現在利用できません。代わりにこれを使用してください-

npm install redis
2
Arthas