【发布时间】:2015-01-24 07:37:51
【问题描述】:
我正在为互斥锁的逻辑而苦苦挣扎;在这里我检查密钥是否被占用,如果没有,我们会拿到它,完成后释放它;但是你能帮我如何让我有一个循环来检查密钥直到它可用吗?
rdb.setnx(lockkey, 'taken', function (err, lockvalue) {
if (err) {
console.error(err);
} else if (lockvalue == 1) {
// You have the lock; process it
//Release the key when you are done:
rdb.del(lockkey);
} else if (lockvalue == 0) {
// Key is taken by someone else; so how can I have a loop to check until key is available to take?
}
});
感谢您的帮助 :-)
更新:
非常感谢 Adeneco 的回答;我一直对自执行功能的逻辑感到困惑;所以如果我想通过超时,请确认我的逻辑是正确的:
n=1;
(function rec(n) {
rdb.setnx(lockkey, 'taken', function (err, lockvalue) {
if (err) {
console.error(err);
} else if (lockvalue == 1) {
// You have the lock; process it
//Release the key when you are done:
rdb.del(lockkey);
} else if (lockvalue == 0) {
// Key is taken by someone else; try again
setTimeout(function(){ rec(n++); }, 30<<n);
}
});
})();
【问题讨论】:
标签: javascript node.js design-patterns redis mutual-exclusion