NodeJS 和 Redis:同时获取三个值

NodeJS and Redis : getting three values simultaneously

目前我这样做是为了使用 node-redis 在 NodeJS 和 Redis 中获取许多值:

redis.get('data1', function(err, data1)
{ 
     redis.get('data2', function(err, data2)
     {
         redis.get('data3', function(err, data3)  
         {

              if (data3 == xx && data2 == xx && data3 == xx)
              { 
                  console.log('its ok'); 
              }

          });
      });
});

问题是三个请求会一个接一个,我想一次做3个,然后像这样调用我的条件(这个不行只是为了让你明白我想要什么) :

redis.get('data1', function(err, data1) { var data1 = data1; });
redis.get('data2', function(err, data2) { var data2 = data2; });
redis.get('data3', function(err, data3) { var data3 = data3; });
// When the 3 get operations was finished 
if (data3 == xx && data2 == xx && data3 == xx)
{ 
    console.log('its ok'); 
}

提前致谢

一种可能(但相当流行)的方法是像这样使用 async 模块:

async.map(['data1','data2','data3'], redis.get, function (err, results) {
  if (err) { return; }
  // results is now an array
});

您可以使用 mgetbatch

redis.mget(['data1', 'data2', 'data3'], cb);

redis.batch().get('data1').get('data2').get('data3').exec(cb);

MGET可能是最快的,而不是来回3次:

client.mget(["data1", "data2", "data3"], function (err, res) {
    console.dir(res);
});

小更新,也许它会帮助某人避免一些挫折 - 在 node-redis v4 中实现了一些非向后兼容的更改,例如,.mget 方法已更改为 .mGet .参见例如:
https://github.com/redis/node-redis/issues/1765
https://github.com/redis/node-redis/releases

现在还有方法 return 默认情况下承诺,因此可以使用 async/await 代替回调:

async testFunc() {
    const values = ["first", "some", "second", "test", "third", "values"];
    const mSetResult = await client.mSet(values);
    console.log(mSetResult); // OK
    const mGetResult = await client.mGet(["first", "second", "fourth", "third"]);
    console.log(mGetResult); // [ 'some', 'test', null, 'values' ]
}

await testFunc();