sql >> Databáze >  >> NoSQL >> Redis

jak získat všechny klíče a hodnoty v redis v javascriptu?

Za prvé, problém ve vaší otázce je, že uvnitř for smyčka, client.get je vyvolán s asynchronním zpětné volání, kde je synchronní for smyčka nebude čekat na asynchronní zpětné volání a tedy na další řádek res.json({data:jobs}); je voláno bezprostředně po for smyčka před asynchronními zpětnými voláními. V době řádku res.json({data:jobs}); se vyvolává pole jobs je stále prázdný [] a dostanete se zpět s odpovědí.

Chcete-li to zmírnit, měli byste použít jakékoli moduly slibů, jako je async , bluebird , ES6 Promise atd.

Upravený kód pomocí asynchronního modulu,

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

Ale z Redis dokumentace, bylo zjištěno, že použití ofKeys je určeno pro ladění a speciální operace, jako je změna rozložení vašeho klíčového prostoru, a není vhodné pro produkční prostředí.

Proto bych navrhl použít jiný modul s názvem redisscan, jak je uvedeno níže, který používá SCAN místo KEYS jak je navrženo v Redis dokumentaci.

Něco jako,

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


  1. Jarní data MongoDb:MappingMongoConverter odstraňte _class

  2. Jak správně zvýšit počet dat v mongoDB?

  3. Fronta zpráv Redis pubsub, ale se zpětným voláním, jako v ZeroMQ

  4. Odeslat do fronty Laravel zvenčí Laravel (NodeJS)