可以使用Redis或Memcached来“锁定”像S3这样的blobstore这样的资源吗?

时间:2012-10-17 21:15:46

标签: python amazon-s3 memcached redis distributed-computing

想要“锁定”外部资源,在这种情况下,它将是存储在rackspace cloud servers上的“blob”,类似于Amazon S3。 (使用Python)

想要像这样处理竞争条件:

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

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

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

Redis有publish / subscribe functionality,这适合在这种情况下使用吗?

或者我还有其他方法可以解决这个问题吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

对于Redis,如果您确实需要锁定,可以使用SETNX创建此类锁定,可以在SETNX documentation中找到更多信息。

如果您预计给定锁定的争用率较低,并且您没有对锁定信息进行任何资源饥饿处理,您也可以使用WATCH / MULTI / EXEC次交易。首先在你要编辑的密钥上设置WATCH,然后在MULTI中编辑密钥本身,最后在EXEC之后,编辑失败,因为有人同时编辑了监视密钥(然后你需要重试)或者它返回OK,你很好。这就是你在Redis中实现机会锁定的方法。 transaction documentation

中的更多信息