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
});
您可以使用 mget
或 batch
。
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();
目前我这样做是为了使用 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
});
您可以使用 mget
或 batch
。
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();