要件: コード取得機能
要件:
1. コード取得は特定の期間のみ可能です。
2. 各期間でリリースされるコードは限られています。
3. 各コードの重複は許可されません。
実装:
1. 同時実行性を考慮せずに実装する:
リーリー
上記のコードはデフォルトで現在の営業時間を満たしており、コードは繰り返されません。
同時実行性を考慮しない処理:
1) 現在のデータベースによって発行された確認コードの数を照会する場合に選択します。
2) まだ場所がある場合は、検証コードを生成してデータベースに挿入し、検証コードをクライアントに返します。
3) いっぱいの場合は、もう場所がないというプロンプトが返されます。
2. 同時条件での実装:
次に、同時条件下で上記のコードによって得られた結果を見てみましょう:
同時実行性をテストするには、Apache ベンチマークを使用できます。Apache ベンチマークは、APACHE の HTTP SERVER のパフォーマンス評価ツールです。cmd を通じて apche の bin ディレクトリに入り、ab -c 同時実行数 -n などの ab コマンドで呼び出します。合計訪問数 URL を測定
コードをコピーします
コードは次のとおりです:
cb -c 100 -n 100 http://localhost/php_mulit.php
このようにして、100 人のユーザーと同僚が 1 つの割り当てを取得しようとします。クエリ中に、各ユーザーが割り当てがまだあることが判明すると、検証コードが生成されてデータベースに挿入され、検証コードが返されます。 ; これにより、認証コードが過剰に発行されます。実際、このコマンドを実行すると、データベースには 1 つではなく 13 個のレコードが追加されます。
これを回避するにはどうすればよいですか?
排他ロックを追加することで、判定から挿入までのプロセスをロックして、この判定プロセスで常に1つのプロセスだけが実行されるようにすることができます。実装は次のとおりです:
リーリー
flock関数を通じてプロセスをロックします。
flock の詳細については、php マニュアルを参照してください: http://php.net/manual/zh/function.flock.php
また走る
コードをコピーします
コードは次のとおりです:
cb -c 100 -n 100 http://localhost/php_mulit.php
データベースには 1 つのレコードのみが追加されるため、同時条件下でのデータの正確性が保証されます。
上記は、ロックによる同時実行下での PHP のコード取得機能についての編集者の紹介です。ご質問があれば、メッセージを残してください。編集者がすぐに返信します。また、スクリプト ハウスの Web サイトをサポートしていただきありがとうございます。