異なるコントローラー間で共有される、CakePHP アプリケーションに悲観的ロックを実装しました。基本的に、ページにアクセスすると、レコードがテーブルに書き込まれ、そのモデルのエントリがそのユーザーによって編集されていることがタイムスタンプとともに示されます。ajax 呼び出しで 30 秒ごとに、そのレコードのタイムスタンプが更新され、ページがまだ使用中であることが示されます。誰かがページに入ろうとすると、アクセスが拒否されます。ページが残っている場合、「ロック」はその 30 秒の終わりに期限切れになります。
全体として、クエリは次のとおりです。
- 3 ページがロードされたとき (1 時間以上経過したすべてのロックを削除 (DELETE)、ページがまだ使用されていないかどうかを確認 (SELECT)、使用されていない場合はロックを作成 (INSERT))。
- 2 ロックが更新されたとき (ページがまだロックされていないかどうかを確認します (SELECT)。ロックされていない場合は、ロックのタイムスタンプを更新します (UPDATE))。
これはデータの永続的なストレージではなく(明らかにデータベースを使用する必要があります)、一時的なものであるため、キャッシュシステムを使用する必要があるかどうか疑問に思っています。データベースよりも高速ですか?(しかし、私のキャッシュは単なるファイルキャッシュであるため、よくわかりません)。