当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在javascript中获取redis中的所有键和值?》经验,为你挑选了1个好方法。

我正在使用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

但我总是得到空白阵列作为回应.

有没有办法在javascript中执行此操作?

谢谢



1> Aruna..:

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

为了缓解这种情况,您应该使用任何承诺模块,如async,bluebird,ES6 Promise等.

使用异步模块修改代码,

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});
            });
        }
    });
});

但是从Redis 文档中可以看出,Keys的使用是用于调试和特殊操作,例如更改键空间布局而不适用于生产环境.

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

就像是,

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();
        }
    });

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有