ホームページ >バックエンド開発 >PHPチュートリアル >PHP で Redis を使用してフラッシュ セール活動を実装する
電子商取引業界の発展に伴い、フラッシュセール活動は主要プラットフォームがユーザーを引き付ける重要な方法の 1 つとなっています。ユーザー数が増加するにつれて、元のサーバーが瞬間的なトラフィックに耐えられなくなり、サーバーがクラッシュし、フラッシュ セール活動を継続できなくなりました。この問題を解決するために、Redis を使用してフラッシュセールス活動を実装できます。
Redis はメモリベースの高性能 NoSQL データベースであり、その主な目的はデータベースをキャッシュして負荷を軽減することです。フラッシュ セール アクティビティにおいて、Redis には次の利点があります。
次に、Redisを使ってフラッシュセール活動を実施する方法を詳しく紹介します。
まず、商品の在庫情報をRedisに設定する必要があります。フラッシュ セール アクティビティでは、製品の在庫が非常に重要であり、フラッシュ セール アクティビティが受け入れることができる注文数量が決まります。 Redis のハッシュ タイプを使用して製品の在庫情報を保存できます。キーは製品の ID、値は製品の在庫数量です。
たとえば、次のコマンドを使用して、ID 1 から 100 の製品の在庫を設定できます:
> HSET goods:1 stock 100
フラッシュ セール アクティビティでは、ユーザーはフラッシュ セール製品を購入する注文を送信できます。ただし、フラッシュ セール アクティビティへのアクセス数が非常に多いため、サーバーがクラッシュしたり、応答時間が長すぎたりする可能性があります。この問題を解決するには、Redis キューを使用して注文を処理します。
まず、注文キューと在庫キューという 2 つのキューを作成する必要があります。注文キューはユーザーが送信した注文を保存するために使用され、在庫キューは残りの在庫を保存するために使用されます。ユーザーが注文を送信すると、注文情報が注文キューに保存され、在庫キューの在庫数量が 1 減ります。これは、誰かがすでに製品を入手したことを示します。
たとえば、次のコマンドを使用して注文キューと在庫キューを作成できます:
> LPUSH orders goods:1:userId > LPUSH stocks goods:1
ここで、orders は注文キューであり、LPUSH コマンドは注文情報グッズ:1:userId を追加します。キューの先頭に。 userId はユーザーの ID です。
stocks は在庫キューであり、LPUSH コマンドは製品 ID Goods:1 をキューの先頭に追加します。
注文キューでは、注文の繰り返しの送信を避けるために、製品 ID とユーザー ID の組み合わせを注文の一意の識別子として使用します。
フラッシュ セール アクティビティを開始する前に、ユーザーが悪意を持って注文を送信するのを防ぐために、各ユーザーの購入を 1 回のみに制限する必要があります。 Redis の set タイプを使用して、購入したユーザー ID を保存できます。
たとえば、次のコマンドを使用して、購入したユーザーの ID を追加できます:
> SADD users:goods1 userId
フラッシュ セール アクティビティ中に、Lua スクリプトを使用して在庫の控除と注文の生成を処理できます。 Lua スクリプトは、在庫と注文の処理のアトミック性を保証し、同時リクエストによって引き起こされる在庫エラーや注文の重複を回避できます。
たとえば、次のコードは、Lua スクリプトを使用してフラッシュ セール アクティビティを処理するコードです:
local userId = ARGV[1] local goodsId = ARGV[2] -- 判断用户是否已经购买过该商品 if redis.call("SISMEMBER", "users:" .. goodsId, userId) == 1 then return 0 end -- 判断库存是否为空 if redis.call("LLEN", "stocks:" .. goodsId) == 0 then return -1 end -- 将用户id加入已购买用户的集合 redis.call("SADD","users:" .. goodsId, userId) -- 从库存队列中弹出商品id local stockGoods = redis.call("RPOP", "stocks:" .. goodsId) -- 在订单队列中添加订单 redis.call("LPUSH", "orders", goodsId .. ":" .. userId) -- 返回商品id return stockGoods
> HINCRBY goods:1 stock 50 > LPUSH stocks goods:1残りの在庫数量をアイテムの在庫情報に追加し、アイテム ID を在庫キューの末尾に追加します。 まとめると、Redis を使用することで、サーバーの負荷やユーザーによる悪意のある注文などの問題を回避しながら、フラッシュ セールス活動を実装することができ、フラッシュ セールス活動をよりスムーズかつ公平にすることができます。
以上がPHP で Redis を使用してフラッシュ セール活動を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。