Redis
 sql >> Base de données >  >> NoSQL >> Redis

comment obtenir toutes les clés et valeurs dans redis en javascript ?

Tout d'abord, le problème dans votre question est que, à l'intérieur du for boucle, client.get est invoqué avec un asynchrone rappel où le synchrone for loop n'attendra pas le rappel asynchrone et donc la ligne suivante res.json({data:jobs}); est appelé immédiatement après le for boucle avant les rappels asynchrones. Au moment de la ligne res.json({data:jobs}); est invoqué, le tableau jobs est encore vide [] et d'être renvoyé avec la réponse.

Pour atténuer cela, vous devez utiliser tous les modules de promesse comme async , bluebird , ES6 Promise etc.

Code modifié à l'aide du module asynchrone,

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

Mais depuis le Redis documentation, il est observé que l'utilisation des clés est destinée au débogage et aux opérations spéciales, telles que la modification de la disposition de votre espace de clés et déconseillée aux environnements de production.

Par conséquent, je suggérerais d'utiliser un autre module appelé redisscan comme ci-dessous qui utilise SCAN au lieu de KEYS comme suggéré dans le Redis documents.

Quelque chose comme,

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