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

hvordan får man alle nøgler og værdier i redis i javascript?

Først og fremmest er problemet i dit spørgsmål, at inde i for loop, client.get påkaldes med en asynkron tilbagekald, hvor den synkrone for loop vil ikke vente på det asynkrone tilbagekald og dermed den næste linje res.json({data:jobs}); bliver kaldt umiddelbart efter for sløjfe før de asynkrone tilbagekald. På tidspunktet for linjen res.json({data:jobs}); bliver påkaldt, arrayet jobs er stadig tom [] og blive returneret med svaret.

For at afbøde dette, bør du bruge alle løftemoduler som async , bluebird , ES6 Promise osv.

Ændret kode ved hjælp af 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});
            });
        }
    });
});

Men fra Redis dokumentation, er det observeret, at brug af nøgler er beregnet til fejlfinding og specielle operationer, såsom ændring af dit keyspace-layout og ikke tilrådeligt i produktionsmiljøer.

Derfor vil jeg foreslå at bruge et andet modul kaldet redisscan som nedenfor, som bruger SCAN i stedet for KEYS som foreslået i Redis dokumentation.

Noget som,

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. Spring RedisTemplate :Serialiser flere modelklasser til JSON. Skal du bruge flere RedisTemplates?

  2. Forbinder MongoDB til Ruby med selvsignerede certifikater til SSL

  3. Pressemeddelelse:ScaleGrid annoncerer hostingtjeneste for Redis™ på AWS

  4. Hvordan ser jeg en mongo-database ved hjælp af docker-compose?