sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo obtener todas las claves y valores en redis en javascript?

En primer lugar, el problema en su pregunta es que, dentro de for bucle, client.get se invoca con un asincrónico devolución de llamada donde el sincrónico for loop no esperará la devolución de llamada asincrónica y, por lo tanto, la siguiente línea res.json({data:jobs}); se llama inmediatamente después de for bucle antes de las devoluciones de llamada asincrónicas. En el momento de la línea res.json({data:jobs}); se está invocando, la matriz jobs todavía está vacío [] y ser devuelto con la respuesta.

Para mitigar esto, debe usar cualquier módulo de promesa como async , bluebird , ES6 Promise etc.

Código modificado usando el módulo asíncrono,

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

Pero desde el Redis documentación, se observa que el uso de Keys está destinado a la depuración y operaciones especiales, como cambiar el diseño del espacio de teclas y no es recomendable para entornos de producción.

Por lo tanto, sugeriría usar otro módulo llamado redisscan como se muestra a continuación, que usa SCAN en lugar de KEYS como se sugiere en Redis documentación.

Algo como,

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