【发布时间】:2019-04-05 05:47:52
【问题描述】:
我想从nodejs 应用程序执行几个redis 操作,每次执行之间有一些给定的延迟。
我正在使用node_redis 客户端。节点版本v8.10.0
我想像下面这样实现它:
function func(id1, max){
for(i=0; i < max; i++){
client.incr(id1, (error, value) => {
if(error){
console.log("redis incr failed : " + error);
return error;
}
console.log("updated value : " + value);
});
sleep.sleep(1);
}
client.quit();
return("incr value ended for : " + id);
}
func(id1, max);
但是在这种情况下,完整的redis incr 发生在一个拉伸和回调(console.log("updated value : " + value")) 延迟发生。注意:对于上面代码中的sleep,我使用的是sleep 包。
我还尝试了以下解决方案(谷歌搜索后发现):
var delay = 1000; //1 second
for (var i = 0; i < max; i++) {
setTimeout(() => {
client.incr(id, (error, value) => {
if(error){
console.log("redis incr failed : " + error);
return error;
}
console.log("updated value : " + value);
});
}, delay);
}
但它的行为也与上述相同。
Afaik,这是由于 nodejs 是 synchronous 而(我认为)node_redis 客户端是 async。
TL;DR
我想要做的是,使用nodejs 在redis 中每n 秒增加一个键。
提前致谢!
PS:我是nodejs的初学者。
【问题讨论】:
标签: node.js asynchronous redis sleep