Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie bekomme ich alle Schlüssel und Werte in Redis in Javascript?

Zunächst einmal ist das Problem in Ihrer Frage das innerhalb des for Schleife, client.get wird mit einem asynchronen aufgerufen Rückruf, wobei die synchrone for Schleife wartet nicht auf den asynchronen Rückruf und damit auf die nächste Zeile res.json({data:jobs}); wird unmittelbar nach dem for aufgerufen Schleife vor den asynchronen Callbacks. Zum Zeitpunkt der Zeile res.json({data:jobs}); aufgerufen wird, das Array jobs ist noch leer [] und erhalten die Antwort zurück.

Um dies abzumildern, sollten Sie Zusagemodule wie async verwenden , bluebird , ES6 Promise usw.

Modifizierter Code mit async-Modul,

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

Aber aus dem Redis Dokumentation wird angemerkt, dass die Verwendung von Schlüsseln für das Debuggen und spezielle Operationen gedacht ist, wie z. B. das Ändern Ihres Schlüsselraumlayouts, und für Produktionsumgebungen nicht ratsam ist.

Daher würde ich vorschlagen, ein anderes Modul namens redisscan wie unten zu verwenden, das SCAN verwendet statt KEYS wie in Redis vorgeschlagen Dokumentation.

Etwas wie,

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