Maison > Article > développement back-end > 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.
<?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é.
<?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!