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

Nodejs, tidak menunggu kueri Redis selesai sebelum melanjutkan eksekusi

Anda mengatakan bahwa file2/3 adalah "konten yang sama" tetapi mereka tidak berada dalam satu area kritis. Per dokumentasi Bluebird untuk promisifyAll (lihat http://bluebirdjs.com/docs/api/promise.promisifyall.html), fitur ini membuat ...Async versi setiap fungsi inti di klien Redis. Anda memanggil hmgetAsync dalam kasus pertama Anda, tetapi Anda hanya memanggil hmget dalam diri Anda yang lain.

Ini penting karena Anda menggunakan pola asinkron tetapi dengan struktur kode non-asinkron. Di file2/3 Anda mengatur result1 di dalam panggilan balik asinkron, tetapi kemudian kembalikan di bawah setiap panggilan sebelum panggilan itu mungkin bisa kembali.

Anda memiliki dua pilihan:

1:Anda dapat mengonversi file2/3/etc ke pola yang sepenuhnya tradisional dengan meneruskan panggilan balik selain klien redis:

module.exports = function(redisclient, callback){

Alih-alih mengembalikan result1 , Anda kemudian akan memanggil panggilan balik dengan nilai ini:

if(redisValue == 'test value'){
    callback(null, "success");
} else {
    callback("failed", null);
}

2:Anda dapat mengonversi file2/3/..N menjadi berbasis Janji, dalam hal ini Anda tidak perlu promisifyAll(require(...)) mereka - Anda cukup require() mereka. Pola seperti itu mungkin terlihat seperti:

module.exports = function(redisclient){
    return redisclient.hmgetAsync("testdata", "text1");
};

Ini adalah opsi yang jauh lebih sederhana dan bersih, dan jika Anda terus menggunakannya, Anda dapat melihat bahwa Anda mungkin bahkan dapat menghilangkan require() dan cukup melakukan hmgetAsync di file1 dengan data yang sesuai dikembalikan oleh Cassandra. Tetapi sulit untuk mengetahuinya tanpa melihat kebutuhan aplikasi spesifik Anda. Bagaimanapun, pola berbasis Janji umumnya jauh lebih pendek dan lebih bersih, tetapi tidak selalu lebih baik - ADA overhead kinerja yang moderat untuk menggunakannya. Ke mana Anda harus pergi - terserah Anda - keduanya akan berhasil.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menghubungkan ke RedisToGo melalui Node.JS

  2. Bagaimana cara melakukan failover ke node Master baru saat menggunakan Redis dengan Sentinel dan redis-py?

  3. Bagaimana Redis mencapai throughput dan kinerja yang tinggi?

  4. apakah mungkin untuk memanggil fungsi lua yang didefinisikan dalam skrip lua lain di redis?

  5. Bagaimana cara mengembalikan Redis primaryKey melalui output template ARM?