2

外部リソースを「ロック」したいと考えています。この場合、Amazon S3 と同様に、ラックスペース クラウド サーバーに保存された「ブロブ」になります。(Python を使用)

競合状態を次のように処理したい:

  • 最初のプロセスはリソースのロックを作成します
  • 最初のプロセスがリソースの編集を開始
  • 2 番目のプロセスが同じリソースを編集しようとすると、リソースがロックされていることがわかります。
  • ロックが解除されたときに通知される 2 番目のプロセス要求
  • 最初のプロセスはリソースの編集を終了し、ロックを解除します
  • 2 番目のプロセスは解放されたリソースの通知を受け取り、独自の編集を行うことができます

Memcached または Redis を使用してロックを作成したいのですが、別のメカニズムでも問題ありません。

これのほとんどは非常に単純です。私が苦労しているのは、強制的に待機して再試行するのではなく、ロックが解除されたときに 2 番目のプロセスに通知する方法です。

Redis にはパブリッシュ/サブスクライブ機能がありますが、これはこの状況での使用に適していますか?

または、この問題を解決するために必要な他の方法はありますか?

本当にありがとう!

4

1 に答える 1

1

Redis に関しては、本当にロックが必要な場合は、SETNXそのようなロックを作成するために使用できます。詳細については、SETNX ドキュメントを参照してください。

特定のロックの競合が少ないと予想され、ロックされた情報に対してリソースを大量に消費する処理がない場合は、WATCH//トランザクションを使用することもできます。最初に編集するキーに WATCH を設定し、次にキー自体を編集し、最後に の後に、誰かがその監視キーを編集しているために編集に失敗するか (その後、再試行する必要があります)、OK を返します。は大丈夫です。これは、Redis で日和見ロックを実装する方法です。取引文書の詳細MULTIEXECMULTIEXEC

于 2012-10-19T10:54:05.197 に答える