ホームページ  >  記事  >  バックエンド開発  >  高い同時ショッピングフラッシュセールを実現するPHP手法

高い同時ショッピングフラッシュセールを実現するPHP手法

不言
不言オリジナル
2018-08-18 17:58:445414ブラウズ

この記事の内容は、PHPで高同時ショッピングフラッシュセールを実現する方法に関するもので、一定の参考価値はありますが、困っている友人は参考にしていただければ幸いです。

フラッシュ セールや電車のチケット取得などの場所では、このような同時実行性の問題がよく発生します。以下に 4 つの解決策を提供します:

1。ファイル ロックを使用します

#

$fp = fopen("order.lock", "r");
if(flock($fp,LOCK_EX)){
    //..处理订单的代码
    flock($fp,LOCK_UN);
}
fclose($fp);

#2. メッセージ キューを使用します##通常、Memcacheq と Radis を使用します。

例: ユーザーが取得できるチケットが 100 個ある場合、これらの 100 個のチケットをキャッシュに置き、読み取りおよび書き込み時にロックしないようにできます。同時実行の量が多い場合、約 500 人がチケットを取得できる可能性があるため、500 人以降のリクエストはイベントの終了時に静的ページに直接転送されます。エントリーした500人のうち400人が商品を手に入れることは不可能です。そのため、列に並んだ順に先着100名のみが正常に購入できます。次の 400 名はイベント終了ページに直接移動します。もちろん、500 名と入力するのは一例であり、その数は自分で調整できます。アクティビティ終了ページでは、データベースではなく静的ページを使用する必要があります。これにより、データベースへの負担が軽減されます。

3.

分散クラスター サーバーの場合は、1 つ以上のキュー サーバーが必要です

シャオミとタオバオの急ぎ買いは少し異なりますが、シャオミは急ぎ買いの瞬間に重点を置いており、一度ノルマを獲得したら、それはあなたのものとなり、注文して支払いを済ませることができます。一方、タオバオは支払い時のフィルタリングに重点を置いており、多層のフィルタリングを実装しています。たとえば、10 個の商品を販売したい場合、10 人以上のユーザーに商品を取得させ、支払い中に同時フィルタリングを実行します。アイテムの数をレイヤーごとに瞬時に減らし、同時実行の量を減らします。


4,
Memcache ロックを使用する


product_lock_key はチケット ロック キーです。

product_key が memcached に存在する場合、すべてのユーザーが注文プロセスに入ることができます。

決済処理に入る場合は、まずadd(product_lock_key, “1″)をmemcachedに格納し、返却が成功したら決済処理に入ります。失敗した場合は、誰かがすでに支払いプロセスに入っていることを意味し、スレッドは N 秒間待機して追加操作を再帰的に実行します。

関連する推奨事項:

ファイルのエクスポート時の phpExcel のメモリ オーバーフローの解決策

PHP で QR コードを実装する方法識別 (コード)

php が Redis を操作するための一般的な方法は何ですか? PHPでredisを操作する方法まとめ(コード付き)

以上が高い同時ショッピングフラッシュセールを実現するPHP手法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。