Couchbaseには、新しい操作を追加し、プロトコルを拡張する方法があります。これにより、新機能を試することができ、その後必要に応じて、開発者はCouchbaseに拡張機能を追加したり、コントリビュータはmemcachedの機能として貢献したりできます。
getl
/unl:
一定時間のロック付きでアイテムを取得します。その後、CASの動作、または明示的なロック解除コマンドのいずれかを使用してロックを解除することができます。
注、このドキュメントおよび機能はまだ開発中であり、必ずしもここに表示される内容と一致しない場合があります。
拡張により、Couchbaseは個々のクライアントが一定期間の排他的なアクセスを確保する機能があります。これはまだサポートされていない機能で、あくまで試用としてとらえてください。
コマンドはドキュメントIDと有効時間の2つの引数を取ります。有効期限が設定されていない場合、デフォルトの有効期限は15秒です。getl
getl
には29秒の最大有効期限があるので、29秒以上の任意の有効期限は自動的に29秒に変更されます。getl
の動作を説明する4つのユースケースがあります。これらのユースケースではgetl
でロックされているドキュメントに対するset操作がブロックされる例としていますが、同様にdelete、incrなどの操作もまたgetl
によってブロックされます。
getl
の潜在的なユースケースは数多くあります:
タイムアウトで指定された時間の間、文書をロックします
クライアントがドキュメントをsetする
15秒のタイムアウトを指定してドキュメントのIDで
する
getl
クライアントが新しい値でドキュメントをsetしようとする
サーバから"EXISTS"の応答が戻ってくる
ドキュメントが更新されていないかを検証するために、ドキュメントIDでgetする
15秒待つ
クライアントが新しい値でドキュメントをsetする
ドキュメントが更新されているかを検証するために、ドキュメントIDでgetする
CASは、タイムアウトする前にドキュメントのロックを解除します
クライアントがドキュメントをsetする
15秒のタイムアウトを使用してドキュメントのIDでgetl
を実行する
適切なCAS idを使用して、ドキュメントにCASを試みる
ドキュメントが更新されているかを検証するために、ドキュメントIDでgetする
新しい値でドキュメントをsetする
ドキュメントが更新されているかを検証するために、ドキュメントIDでgetする
getl
は、ロックされたドキュメントには実行できません
クライアントがドキュメントをsetする
15秒のタイムアウトを指定してドキュメントのIDでgetl
する
タイムアウトなしでgetlを
実行する
サーバから"LOCK_ERROR"の応答が戻ってくる
getl
のタイムアウト
クライアントがドキュメントをsetする
3600秒のタイムアウトを指定してドキュメントのIDでgetl
を実行する(Couchbaseは29秒で設定します)
5秒のタイムアウトを指定してドキュメントのIDでgetl
する
5秒待つ
新しい値でドキュメントをsetする
setは、"EXISTS"で失敗する
24秒待つ
新しい値でドキュメントをsetする
setは成功する
ドキュメントが更新されているかを検証するために、ドキュメントIDでgetする