2

想要“锁定”外部资源,在这种情况下,它将是存储在机架空间云服务器上的“blob” ,类似于 Amazon S3。(使用 Python)

希望像这样处理竞争条件:

  • 第一个进程创建资源锁
  • 第一个进程开始编辑资源
  • 第二个进程尝试编辑同一资源并发现该资源已被锁定。
  • 第二个进程请求在锁被取消时得到通知
  • 第一个进程完成编辑资源并移除锁
  • 第二个进程收到释放资源的通知并能够进行自己的编辑

想使用 Memcached 或 Redis 来创建锁,但也可以使用不同的机制。

其中大部分非常简单,我正在努力解决的部分是如何在删除锁时通知第二个进程,而不是强制它等待并重试。

Redis 具有发布/订阅功能,在这种情况下是否适合使用?

还是有其他方法可以解决这个问题?

非常感谢!

4

1 回答 1

1

至于 Redis,如果你真的需要锁,你可以使用SETNX创建这样的锁,更多信息可以在SETNX 文档中找到。

如果您预计给定锁的争用较低,并且您没有任何资源消耗处理锁定信息,您也可以使用//WATCH事务。首先,您在要编辑的密钥上设置 WATCH,然后在您编辑密钥本身,然后最后在 之后,它要么使编辑失败,因为有人同时编辑了该观看的密钥(然后您需要重试),要么它返回 OK 并且您没事。这就是在 Redis 中实现机会锁定的方式。交易文档中的更多信息MULTIEXECMULTIEXEC

于 2012-10-19T10:54:05.197 回答