sql >> Databasteknik >  >> NoSQL >> Redis

hur får man alla nycklar och värden i redis i javascript?

Först och främst är problemet i din fråga att, inuti for loop, client.get anropas med en asynkron återuppringning där synkron for loop kommer inte att vänta på den asynkrona återuppringningen och därmed nästa rad res.json({data:jobs}); anropas omedelbart efter for loop före de asynkrona återuppringningarna. Vid tidpunkten för raden res.json({data:jobs}); anropas, arrayen jobs är fortfarande tom [] och få tillbaka svaret.

För att mildra detta bör du använda alla löftesmoduler som async , bluebird , ES6 Promise etc.

Modifierad kod med asynkronmodul,

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 från Redis dokumentation, observeras att användning av nycklar är avsedd för felsökning och speciella operationer, såsom att ändra din tangentrymdslayout och är inte tillrådlig för produktionsmiljöer.

Därför skulle jag föreslå att du använder en annan modul som heter redisscan som nedan som använder SCAN istället för KEYS som föreslås i Redis dokumentation.

Något 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. BSON till JSON-dokumentkonvertering i Java

  2. Redis Expire fungerar inte

  3. De sex bästa Redis-minnesanalysverktygen

  4. Redis och Node.js och Socket.io Frågor