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でこれを行う方法はありますか?
ありがとう
これは絶対にしないでください。まず、本番環境でKEYS *
を使用することは推奨されません。第二に、これはスケーリングしません(クラスター)。
キャッシュされたエントリをSETに整理し、SET内のアイテムを照会してから、参照キーを取得できます。これにより、無効化も簡単になります。
データストレージのベストプラクティスをご覧ください。
https://redis.io/topics/data-types-introjavascriptでredisのすべてのキーと値を取得する方法?
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);
順序は両方のアレイで同じです。
これはすべてのキーを取得しますが、値はありません:
const redis = require('redis');
const client = redis.createClient();
client.keys('*', (err, keys) => {
// ...
});
次に、これらのキーの値を通常の方法で取得する必要があります。例えば:
Promise.all(keys.map(key => client.getAsync(key))).then(values => {
// ...
});
またはasync
モジュールまたは任意の方法で。
このリンクで何か役に立つかもしれません
https://github.com/NodeRedis/node_redis/tree/master/examples