Redis
 sql >> Database >  >> NoSQL >> Redis

come ottenere tutte le chiavi e i valori in redis in javascript?

Prima di tutto, il problema nella tua domanda è che, all'interno di for loop, client.get viene invocato con un asincrono callback dove sincrono for loop non attenderà la richiamata asincrona e quindi la riga successiva res.json({data:jobs}); viene chiamato immediatamente dopo il for ciclo prima dei callback asincroni. Al momento della riga res.json({data:jobs}); viene richiamato, l'array jobs è ancora vuoto [] e di essere restituito con la risposta.

Per mitigare questo, dovresti usare qualsiasi modulo di promessa come async , bluebird , ES6 Promise ecc.

Codice modificato utilizzando il modulo asincrono,

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

Ma dal Redis documentazione, si osserva che l'uso delle chiavi è inteso per il debug e operazioni speciali, come la modifica del layout dello spazio delle chiavi e non è consigliabile per gli ambienti di produzione.

Quindi, suggerirei di utilizzare un altro modulo chiamato redisscan come di seguito che utilizza SCAN invece di KEYS come suggerito nel Redis documentazione.

Qualcosa come,

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