2

ユーザーがバックエンド PHP ページにリクエストを送信するたびに、1 対 1 の通信が開始されます。つまり、そのページの新しいインスタンスが作成され、ユーザーのリクエストに従って実行されます。

私の質問は、新しいインスタンスが作成されるたびに、すべてのインスタンスで共有される PHP スクリプトを作成したい場合です。

例:そのスクリプトに数百の乱数を保存し(pool.php-静的プールと名付けましょう)、バックエンドページ( BE.php としましょう)へのリクエストが行われるたびに、 BE.php毎回一意の変数を返すように pool.php を要求し、すべての変数が使用されたら、新しい変数セットを作成するロジックを pool.php に入れます。

私の質問が明確でない場合は、お知らせください

4

3 に答える 3

1

Tarunさん、データベースには、ユーザー コメントAUTO_INCREMENTとして使用できるフィールドと呼ばれるものがあることをご存知でしょう。primary keysそして、新しいコメントを追加するたびに、そのフィールドは DB サーバーによってインクリメントされunique ID、汗をかくことなくすべての新しいエントリを取得しますか?

あなたの必要性に対する唯一の実行可能な方法は、データベースと、フィールドが十分でない場合、John SeverinsonのようなMutexMySQL内部を使用することです。MutexAUTO_INCREMENT

PSパフォーマンスのオーバーヘッド... PHPスクリプトについて話すときは、問題ではありません。パフォーマンスが必要な場合は、サイトを C/C++ で記述してください。あなたはミリ秒(0.001秒)以下について話している。それがパフォーマンスに影響する場合は、プロジェクト/ロジックを再検討する必要があります。

于 2013-05-12T15:47:34.343 に答える
1

これは、MySQL と問題のテーブルをロックすることで解決できます。この変数のプールを別のテーブルに保持し、次を使用して、SQL テーブルレベル ロックを使用して、現在のリクエストが終了するまで他のリクエストを保留します。

SELECT GET_LOCK( 'my_lock', 10 ) AS success

クエリが 1 を返すことを確認してください。これは、現在ロックされていることを意味します。そうでない場合、クエリはロック待ちでタイムアウトしました。

次に、占有されていない変数が存在するかどうかを確認するなど、通常のクエリを実行します。もしそうなら、それを更新するなどして占有してください。

次に、次を使用してロックを解除します。

DO RELEASE_LOCK( 'my_lock' )

数値 10 は、各要求が失敗するまで待機するタイムアウトです。

于 2013-05-12T06:42:15.417 に答える
1

Memcached はこれに適した候補です。

これは、PHP の出入りに関係なく持続するキー/バリュー ストアです。ある PHP スクリプトから値を書き込んで、別のスクリプトから読み取ることができます。これはまさにあなたが探しているものではありませんが、同じ目的で使用でき、他の PHP スクリプトに接続するソケットよりもはるかに簡単に処理できます。

http://memcached.org/

于 2013-05-12T06:36:18.397 に答える