gpt4 book ai didi

javascript - 如何在javascript中获取redis中的所有键和值?

转载 作者:IT老高 更新时间:2023-10-28 23:16:00 24 4
gpt4 key购买 nike

我正在使用 javascript 创建一个 Node API。我使用 redis 作为我的键值存储。我在我的应用程序中创建了一个 redis 客户端,并且能够获取特定键的值。

我想检索所有键及其值。到目前为止,我已经这样做了:

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中做到这一点?

谢谢

最佳答案

首先,您的问题中的问题是,在 for 循环中,client.get 是通过 asynchronous 回调调用的synchronous for 循环不会等待异步回调,因此下一行 res.json({data:jobs}); 是在异步回调之前的 for 循环之后立即调用。在调用 res.json({data:jobs}); 行时,数组 jobs 仍然为空 []并与响应一起返回。

为了缓解这种情况,您应该使用任何 Promise 模块,例如 asyncbluebirdES6 Promise 等。

使用 async 修改代码模块,

app.get('/jobs', function (req, res) {
var jobs = [];
client.keys('*', function (err, keys) {
if (err) return console.log(err);
if(keys){
async.map(keys, function(key, cb) {
client.get(key, function (error, value) {
if (error) return cb(error);
var job = {};
job['jobId']=key;
job['data']=value;
cb(null, job);
});
}, function (error, results) {
if (error) return console.log(error);
console.log(results);
res.json({data:results});
});
}
});
});

But from the Redis documentation, it is observed that usage of Keys are intended for debugging and special operations, such as changing your keyspace layout and not advisable to production environments.

因此,我建议使用另一个名为 redisscan 的模块如下使用 SCAN 而不是 KEYSRedis documentation 中所建议的那样.

类似的,

var redisScan = require('redisscan');
var redis = require('redis').createClient();


redisScan({
redis: redis,
each_callback: function (type, key, subkey, value, cb) {
console.log(type, key, subkey, value);
cb();
},
done_callback: function (err) {
console.log("-=-=-=-=-=--=-=-=-");
redis.quit();
}
});

关于javascript - 如何在javascript中获取redis中的所有键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42926990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com