Redis
 sql >> Baza danych >  >> NoSQL >> Redis

jak zdobyć wszystkie klucze i wartości w redis w javascript?

Przede wszystkim problem w twoim pytaniu polega na tym, że w for pętla, client.get jest wywoływany z asynchronicznym wywołanie zwrotne, gdzie synchroniczny for pętla nie będzie czekać na asynchroniczne wywołanie zwrotne i stąd następna linia res.json({data:jobs}); jest wywoływany natychmiast po for pętla przed asynchronicznymi wywołaniami zwrotnymi. W momencie wiersza res.json({data:jobs}); jest wywoływana, tablica jobs jest nadal pusty [] i otrzymanie odpowiedzi z odpowiedzią.

Aby to złagodzić, powinieneś użyć dowolnych modułów obietnic, takich jak async , bluebird , ES6 Promise itp.

Zmodyfikowany kod przy użyciu modułu asynchronicznego,

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

Ale z Redis dokumentacji, zauważa się, że użycie klawiszy jest przeznaczone do debugowania i operacji specjalnych, takich jak zmiana układu przestrzeni kluczy i nie jest zalecane w środowiskach produkcyjnych.

Dlatego sugerowałbym użycie innego modułu o nazwie redisscan, jak poniżej, który używa SCAN zamiast KEYS zgodnie z sugestią w Redis dokumentacja.

Coś jak,

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. limit czasu redis z predis

  2. użyj node-redis z węzłem 8 util.promisify

  3. Piszesz zapytanie, aby dodać wiele wartości do klucza w skrótach REDIS?

  4. Redis nie uruchamia się jako usługa systemu Windows w systemie Windows7

  5. Korzystanie z Redis SCAN w NODE