1

我正在尝试使用 RedLock 来防止 2 个用户同时对同一资源进行操作(彼此预订的东西太快)。但是,如果资源已被其他人获取,我希望它完全失败(在请求提交事务后预订可用性将消失)。我不清楚在文档中如果资源仍然被锁定会发生什么以及此时如何失败。它只是抛出一个错误吗?https://github.com/mike-marcacci/node-redlock#usage-promise-style

const redlock = new Redlock(...);
let lock;
try {
  lock = redlock.lock('bookId', 120000);
} catch (err) {
  // ... lock failed to be acquired because someone else still had it? (after retries are finish)
}
4

1 回答 1

0

我使用的上述示例确实有效。一旦所有获取锁的尝试都用完,它会抛出一个错误。在大多数互斥情况下,不应该发生这种情况。它应该被配置为有足够的时间让其他客户端等待锁定的资源最终获得它。如果您希望它完全失败(您不希望第二个客户端获取资源),只需将 Redlock 配置为一次尝试,Redlock 就会抛出。

const redlock = new Redlock(...);
let lock;
try {
  lock = redlock.lock('bookId', 120000);
} catch (err) {
  // Attempted to grab lock but failed after all attempts (configured) are finished
}
于 2021-06-23T01:01:40.453 回答