Maison  >  Article  >  développement back-end  >  Stratégie de contrôle de concurrence dans le système PHP Flash Kill

Stratégie de contrôle de concurrence dans le système PHP Flash Kill

WBOY
WBOYoriginal
2023-09-19 11:51:261107parcourir

Stratégie de contrôle de concurrence dans le système PHP Flash Kill

La stratégie de contrôle de concurrence dans le système de vente flash PHP nécessite des exemples de code spécifiques

Avec le développement rapide d'Internet et du commerce électronique, les activités de vente flash sont devenues l'un des moyens importants permettant aux grandes plateformes d'attirer les utilisateurs. Cependant, un accès simultané élevé aux activités de vente flash constitue un défi de taille, car dans les activités de vente flash, le nombre de produits est limité, mais de nombreux utilisateurs participent à l'achat précipité. Si le niveau de concurrence est trop important, le système peut facilement planter, empêchant les utilisateurs de participer correctement aux activités. Dans ce cas, comment contrôler la concurrence et assurer le fonctionnement stable du système est devenu une technologie de base du système PHP Flash Killing.

Dans le système de vente flash PHP, les stratégies de contrôle de concurrence courantes peuvent être divisées en deux types : l'une est un verrouillage pessimiste basé sur une base de données, une stratégie de contrôle de concurrence ; l'autre est un verrouillage optimiste basé sur le cache, une stratégie de contrôle de concurrence.

  1. Basée sur le verrouillage pessimiste de la base de données, stratégie de contrôle de concurrence
    Le verrouillage pessimiste est une stratégie de verrouillage plus conservatrice. Elle suppose que l'accès simultané est à haute fréquence, donc avant chaque opération de la base de données, il essaiera de se verrouiller pour empêcher d'autres transactions d'apporter des modifications. à ces données. L'exemple de code spécifique est le suivant :
<?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 '秒杀失败!';
}
?>

Dans le code ci-dessus, l'instruction SELECT...FOR UPDATE est utilisée pour verrouiller et interroger l'inventaire des produits. Si le stock est supérieur à 0, effectuez l'opération de réduction du stock et soumettez la transaction. Sinon, la transaction est annulée, indiquant que la vente flash a échoué.

  1. Verrouillage optimiste basé sur le cache, stratégie de contrôle de la concurrence
    Le verrouillage optimiste est une stratégie de verrouillage relativement ouverte, qui suppose que l'accès simultané ne sera pas fréquemment en conflit. Avant chaque opération, les données sont vérifiées pour voir si elles ont été modifiées par d'autres transactions. S'il n'a pas été modifié, effectuez l'opération et mettez à jour les données. L'exemple de code spécifique est le suivant :
<?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 '商品已售罄!';
}
?>

Dans le code ci-dessus, connectez-vous d'abord au serveur Redis et obtenez des informations sur l'inventaire des produits. Si l'inventaire est supérieur à 0, utilisez une transaction Redis pour réduire la quantité d'inventaire et déterminer le résultat de l'exécution de la transaction. Si la transaction est exécutée avec succès, cela signifie que la vente flash est réussie, sinon cela signifie que la vente flash échoue.

Pour résumer, le verrouillage pessimiste basé sur une base de données et le verrouillage optimiste basé sur le cache sont des stratégies de contrôle de concurrence courantes dans les systèmes de suppression flash PHP. Choisir la stratégie appropriée en fonction de la situation réelle peut améliorer efficacement la capacité de traitement simultané et la stabilité du système et garantir l'expérience utilisateur de participation aux activités de vente flash.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn