我正在尝试使用RedLock来防止两个用户同时在同一资源上执行操作(从对方那里预订东西太快了)。但如果资源已经被其他人获得,我希望它完全失败(在请求提交事务之后,预订可用性将消失)。在文档中,我不清楚如果资源仍然被锁定会发生什么,以及在这一点上如何失败。它只是抛出一个错误吗?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)
}发布于 2021-06-23 09:01:40
我使用的上面的例子实际上是有效的。一旦所有获取锁的尝试都用完了,它就会抛出错误。在大多数互斥情况下,这种情况不应该发生。它应该进行配置,以便有足够的时间让其他客户端等待锁定的资源,以最终获得它。如果您希望它完全失败(您不希望第二个客户端获取资源),只需将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
}https://stackoverflow.com/questions/68027628
复制相似问题