如果资源已被锁定,会发生什么情况



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

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)
}

我使用的上面的例子实际上起了作用。一旦所有获取锁的尝试都用光了,它就会抛出一个错误。在大多数相互排斥的情况下,这种情况不应该发生。它的配置应该让其他客户端有足够的时间等待锁定的资源最终获得它。如果你希望它完全失败(你不希望第二个客户端获得资源(,只需为一次尝试配置红锁,红锁就会抛出。

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
}

相关内容

最新更新