同時実行性の高い在庫のブロックを解決し、過剰在庫、フラッシュセール、不動産の強奪、宝くじなどを制御するための PHP のアイデアと方法。
より実現可能だと思うアイデアをいくつか紹介します:
オプション 1: メッセージ
queue を使用して実装する
は MemcacheQ などのメッセージ
queue に基づいて行うことができます。具体的な実装計画は表現してみましょうたとえば、ユーザーが取得できるチケットが 100 枚ある場合、ユーザーはこれら 100 枚のチケットをキャッシュに置き、読み取りおよび書き込み時にロックしないことができます。 同時実行の量が多い場合、約 500 人がチケットを取得できる可能性があるため、500 人以降のリクエストはイベントの終了時に静的ページに直接転送されます。 500人中400人が商品を手に入れることは不可能です。したがって、
キューに入った順に従って、最初の100名のみが正常に購入できます。次の 400 名はイベント終了ページに直接移動します。もちろん、500 人と入力するのは単なる例です。その数は自分で調整できます。アクティビティ終了ページでは、データベースではなく静的ページを使用する必要があります。これにより、データベースへの負担が軽減されます。
オプション 2: 複数のサーバーがある場合、オフロードの形で実装できます
m 個のチケットがあり、n 台の製品サーバーがリクエストを受信し、x 個のリクエストがルーティング サーバーによってランダムに転送されると仮定します
m/n 個のチケットを各製品サーバーに直接割り当てます
各製品サーバーのメモリに
カウンター を作成し、たとえば m/n*(1+0.1) 人の入場を許可します。 メモリ
カウンターがいっぱいの場合: 後から入る人はイベントが終了する静的ページに直接ジャンプし、
このサーバーにルーティングされなくなることをルーティングサーバーに通知します(これは議論する価値がある)。
すべての製品サーバーから入ってくる m/n*(1+0.1) 人が支払いサーバーに転送され、誰がより早いかを確認するために支払いプロセスに入ります。現時点では人数が少ないため、ロックか何かが簡単です。
オプション 3. 単一サーバーの場合は、Memcache ロックを使用して実装できます
product_key はチケット キーです
product_lock_key はチケット ロック キーです
product_key が memcached に存在する場合、すべてのユーザー注文手続きに入ることができます。
支払い手続きに入るときは、まずadd(product_lock_key, “1”)をmemcachedに格納し、
返品に成功したら支払い手続きに入ります。
失敗した場合は、誰かがすでに支払いプロセスに入っていることを意味し、スレッドは N 秒間待機して追加操作を再帰的に実行します。
オプション 4: ファイル排他ロックを使用する
注文リクエストを処理するときに、flock を使用してファイルをロックします。ロックが失敗した場合は、現時点では他の注文が処理中であることを意味します。または、ユーザーに直接「サーバーがビジーです」とプロンプトを表示します。 -ブロッキングモード:
<?php $fp = fopen("lock.txt", "w+"); if(flock($fp,LOCK_EX)) { //..处理订单 flock($fp,LOCK_UN); } fclose($fp); ?>
上記では、行列、フラッシュセール、人数、カウンターなど、パニック買い、フラッシュセール、財産の強奪、宝くじなどの同時実行性の高い在庫の防止と制御をブロックする問題を解決するための PHP のアイデアと方法を紹介します。 PHP チュートリアルに興味のある友人が助けてくれることを願っています。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Jdk1.5 以降では、java.util.concurrent.locks パッケージの下に、スレッド同期用のインターフェイスとクラスのセットが存在します。スレッド同期に関して言えば、組み込みキーワードである synchronized キーワードを誰もが思い浮かべるかもしれません。 Java ではスレッドの同期を処理しますが、このキーワードには多くの欠陥があり、利便性や直感的に使用することが難しいため、Lock が表示されます。通常、synchronized キーワードを使用すると、次の問題が発生します。 (1) 制御不能、自由にロックしたりロックを解放したりできない。 (2) 効率は比較的低く、たとえば、現在 2 つのファイルを同時に読み取っています。

Linux では、flock、fcntl、lockfile、flockfile など、一般的に使用されるファイル ロック コマンドがいくつかあります。これらのコマンドは、マルチプロセスまたはマルチスレッド環境でファイルへの相互排他的アクセスを提供するために使用されます。これらのコマンドの詳細なチュートリアルは次のとおりです。 flock コマンド: flock コマンドをシェル スクリプトで使用して、ファイルの排他的ロックを実行できます。ファイルをロックするには、次の構文を使用します。 flock [options] filename コマンド たとえば、file.txt という名前のファイルをロックしてコマンドを実行するには、次のコマンドを実行します。 flockfile.txtls - lflock コマンドは、実行中にファイルをロックします。ロックはコマンドの実行完了後に自動的に解除されます。 fcnt

1. 機能 (1) ロックを取得する Lock メソッドは、割り込みをサポートし、タイムアウト後の取得なし、ノンブロッキング (2) セマンティクスを改善します。どこでロックおよびロックを解除するかを書き出す必要があります (3) ロックの明示的なロックにより、次のことが可能になります。優れた柔軟性を備えていますが、同時にロックを手動で解放する必要があります (4) サポート条件条件オブジェクト (5) 複数の読み取りスレッドが同時に共有リソースにアクセスできるようにします 2. ロックの使用法 // ロックを取得 voidlock() //現在のスレッドがロックを取得していない場合、中断された場合、ロックを取得します voidlockInterruptibly()//この Lock インスタンスにバインドされた新しい Condition インスタンスを返します ConditionnewCondition()//呼び出されたときのみロックします

注1. Lockはjava.util.concurentパッケージ配下のインタフェースであり、一連のロック操作メソッドを定義しています。 2. Lock インターフェイスには、主に ReentrantLock、ReentrantReadWriteLock、ReentrantReadWriteLock、および WriteLock 実装クラスが含まれます。 Synchronized とは異なり、Lock はロックの取得やロックの解放などの関連インターフェイスを提供するため、より柔軟に使用でき、より複雑な操作が可能になります。 InstanceReentrantReadWriteLocklock=newReentrantReadWriteLock();Lockread

1. マルチ環境切り替えは SpringBoot に実装されています。SpringBoot では、application.properties に加えて、作成する他の設定ファイルのファイル名が application-{profile}.properties の形式を満たす必要があります。ここで、{profile} は環境識別子 (必ずしも .properties ファイルまたは .yml であるとは限りません) とそれに対応する {profile} 値は開発者 (dev、product など) によってカスタマイズされます。プロジェクトの開始時に、対応するパラメーターを追加するだけで済みます。 Springboot がそれを読み取ります。プロファイルを作成します。特定のプロファイル構成

概要: synchronized キーワードは、1 つのスレッドのみが同期されたコード ブロックにアクセスできるようにするために Java で提供されています。 synchronized キーワードが提供されているのに、なぜ Lock インターフェースも Java SDK パッケージで提供されるのですか?これは不必要な車輪の再発明でしょうか?今日はこの問題について一緒に話し合います。 Java では synchronized キーワードが提供され、1 つのスレッドのみが同期されたコード ブロックにアクセスできるようにします。 synchronized キーワードが提供されているのに、なぜ Lock インターフェースも Java SDK パッケージで提供されるのですか?これは不必要な車輪の再発明でしょうか?今日は一緒にそれについて話し合いましょう

1. ロックの取得には、取得メソッド lock()、tryLock()、tryLock(longtime、TimeUnitunit)、および lockInterruptibly() がすべて使用されます。 (1) lock() メソッドは最も一般的に使用されるメソッドであり、ロックを取得するために使用されます。ロックが別のスレッドによって取得されている場合は、待機します。 (2) tryLock() メソッドには戻り値があり、ロックの取得を試行するために使用され、取得に成功した場合は true を返し、取得に失敗した場合 (つまり、ロックが他のユーザーによって取得された場合) を返します。 thread) の場合、false が返されます。これは、メソッドが何があってもすぐに返されることを意味します。ロックができないときにそこで待つ必要はありません。 (3) トライロック
