web-dev-qa-db-ja.com

javascriptでredisのすべてのキーと値を取得する方法は?

JavaScriptを使用してノードAPIを作成しています。キーバリューストアとしてredisを使用しました。アプリでredis-clientを作成し、特定のキーの値を取得できます。

すべてのキーとその値を取得したい。これまでのところ、私はこれをやった:

app.get('/jobs', function (req, res) {
    var jobs = [];
    client.keys('*', function (err, keys) {
        if (err) return console.log(err);
        if(keys){
            for(var i=0;i<keys.length;i++){
                client.get(keys[i], function (error, value) {
                    if (err) return console.log(err);
                    var job = {};
                    job['jobId']=keys[i];
                    job['data']=value;
                    jobs.Push(job);
                });  
            }
            console.log(jobs);
            res.json({data:jobs});
        }
    });
});

しかし、私は常に応答で空の配列を取得します。

javascriptでこれを行う方法はありますか?

ありがとう

11
Bhushan Gadekar

これは絶対にしないでください。まず、本番環境でKEYS *を使用することは推奨されません。第二に、これはスケーリングしません(クラスター)。

キャッシュされたエントリをSETに整理し、SET内のアイテムを照会してから、参照キーを取得できます。これにより、無効化も簡単になります。

データストレージのベストプラクティスをご覧ください。

https://redis.io/topics/data-types-introjavascriptでredisのすべてのキーと値を取得する方法?

2
Adam Eri

2つのリクエストの組み合わせ:

import * as ioredis from 'ioredis';

const redis = new ioredis({
    port: redisPort,
    Host: redisServer,
    password: '',
    db: 0
  });

const keys = await redis.collection.keys('*');
const values = await redis.collection.mget(keys);

順序は両方のアレイで同じです。

1

これはすべてのキーを取得しますが、値はありません:

const redis = require('redis');
const client = redis.createClient();

client.keys('*', (err, keys) => {
  // ...
});

次に、これらのキーの値を通常の方法で取得する必要があります。例えば:

Promise.all(keys.map(key => client.getAsync(key))).then(values => {
  // ...
});

またはasyncモジュールまたは任意の方法で。

1
rsp

このリンクで何か役に立つかもしれません

https://github.com/NodeRedis/node_redis/tree/master/examples

0
Dhiraj