ホームページ >バックエンド開発 >PHPチュートリアル >PHP フラッシュキルシステムの同時実行制御戦略

PHP フラッシュキルシステムの同時実行制御戦略

WBOY
WBOYオリジナル
2023-09-19 11:51:261160ブラウズ

PHP フラッシュキルシステムの同時実行制御戦略

PHP フラッシュ セール システムの同時実行制御戦略には、特定のコード サンプルが必要です

インターネットと電子商取引の急速な発展に伴い、フラッシュ セール活動は、ユーザーを集客するための主要なプラットフォームの重要な手段の一つ。しかし、フラッシュ販売活動では商品数が限られているにもかかわらず、多くのユーザーが駆け込み購入に参加するため、フラッシュ販売活動への高い同時アクセスは大きな課題となっています。同時実行の量が多すぎると、システムがクラッシュしやすくなり、ユーザーがスムーズにアクティビティに参加できなくなる可能性があります。この場合、同時実行性をどのように制御し、システムの安定した動作を保証するかが、PHP フラッシュ キリング システムの中核技術となっています。

PHP フラッシュ セール システムでは、一般的な同時実行制御戦略は 2 つのタイプに分類できます: 1 つはデータベース ベースの悲観的ロック、同時実行制御戦略で、もう 1 つはキャッシュ ベースの楽観的ロック、同時実行制御戦略です。 。

  1. データベース悲観的ロックに基づく同時実行制御戦略
    悲観的ロックはより保守的なロック戦略であり、同時アクセスが高頻度であることを前提としているため、各データベース操作の前にロックが試行されます。他のトランザクションがデータを変更するのを防ぐためです。具体的なコード例は次のとおりです。
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'root', '');

// 开始事务
$db->beginTransaction();

try {
    $stmt = $db->prepare('SELECT * FROM goods WHERE id = 1 FOR UPDATE');
    $stmt->execute();
    
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($result['stock'] > 0) {
        $stmt = $db->prepare('UPDATE goods SET stock = stock - 1 WHERE id = 1');
        $stmt->execute();
        
        // 提交事务
        $db->commit();
        
        echo '秒杀成功!';
    } else {
        echo '商品已售罄!';
    }
} catch (Exception $e) {
    // 回滚事务
    $db->rollBack();
    
    echo '秒杀失败!';
}
?>

上記のコードでは、SELECT...FOR UPDATE ステートメントを使用して製品在庫をロックし、クエリを実行します。在庫が 0 より大きい場合は、在庫削減操作を実行してトランザクションを送信します。それ以外の場合、トランザクションはロールバックされ、フラッシュ セールが失敗したことが示されます。

  1. キャッシュ ベースのオプティミスティック ロック、同時実行制御戦略
    オプティミスティック ロックは比較的オープンなロック戦略であり、同時アクセスが頻繁に競合しないことを前提としています。各操作の前に、データが他のトランザクションによって変更されていないかどうかがチェックされます。変更されていない場合は操作を実施し、データを更新してください。具体的なコード例は次のとおりです。
<?php
$redis = new Redis();
$redis->connect('localhost', 6379);

$stock = $redis->get('goods_stock');

if ($stock > 0) {
    $redis->multi();
    $redis->decr('goods_stock');
    $result = $redis->exec();
    
    if ($result) {
        echo '秒杀成功!';
    } else {
        echo '秒杀失败!';
    }
} else {
    echo '商品已售罄!';
}
?>

上記のコードでは、まず Redis サーバーに接続し、製品インベントリ情報を取得します。在庫が 0 より大きい場合は、Redis トランザクションを使用して在庫数量を減らし、トランザクションの実行結果を判断します。トランザクションが正常に実行された場合はフラッシュセールが成功したことを意味し、そうでない場合はフラッシュセールが失敗したことを意味します。

要約すると、データベース ベースの悲観的ロックとキャッシュ ベースの楽観的ロックは、PHP フラッシュ キル システムにおける一般的な同時実行制御戦略です。実際の状況に基づいて適切な戦略を選択することで、システムの同時処理能力と安定性を効果的に向上させ、フラッシュ セール活動に参加するユーザー エクスペリエンスを確保できます。

以上がPHP フラッシュキルシステムの同時実行制御戦略の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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