Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

bagaimana cara mendapatkan semua kunci dan nilai dalam redis di javascript?

Pertama-tama, masalah dalam pertanyaan Anda adalah, di dalam for loop, client.get dipanggil dengan asinkron panggilan balik di mana sinkron for loop tidak akan menunggu panggilan balik asinkron dan karenanya baris berikutnya res.json({data:jobs}); dipanggil segera setelah for loop sebelum panggilan balik asinkron. Pada saat baris res.json({data:jobs}); sedang dipanggil, larik jobs masih kosong [] dan mendapatkan balasan dengan tanggapan.

Untuk mengurangi ini, Anda harus menggunakan modul janji apa pun seperti async , bluebird , ES6 Promise dll.

Kode yang dimodifikasi menggunakan modul async,

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

Tapi dari Redis dokumentasi, diamati bahwa penggunaan Kunci dimaksudkan untuk debugging dan operasi khusus, seperti mengubah tata letak ruang kunci Anda dan tidak disarankan untuk lingkungan produksi.

Oleh karena itu, saya sarankan menggunakan modul lain yang disebut redisscan seperti di bawah ini yang menggunakan SCAN bukannya KEYS seperti yang disarankan dalam Redis dokumentasi.

Sesuatu seperti,

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. Redis sentinel vs pengelompokan

  2. cara memindahkan data dari mysql ke redis

  3. Bagaimana saya bisa mendapatkan semua set di redis?

  4. RuntimeError:-ERR Perintah Tidak Dikenal menjalankan permata redis di Ruby

  5. Apakah Redis menyimpan data?