Maison >développement back-end >tutoriel php >Découverte de cas de plusieurs méthodes d'implémentation pour résoudre des problèmes de concurrence dans le développement PHP
Cet article explique la découverte de plusieurs méthodes d'implémentation pour résoudre les problèmes de concurrence dans le développement PHP.
Les exemples de cet article décrivent plusieurs méthodes d'implémentation pour résoudre les problèmes de concurrence dans le développement PHP. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :
Dans des scénarios simultanés tels que l'achat précipité de produits, des phénomènes de survente peuvent survenir. À ce stade, ces problèmes causés par la concurrence doivent être résolus
.Il n'existe pas de solution de concurrence native dans le langage PHP, d'autres méthodes sont donc nécessaires pour réaliser le contrôle de concurrence.
Option 1 : Utiliser le verrouillage exclusif du verrouillage de fichier
La fonction flock est utilisée pour acquérir le verrouillage de fichier. Ce verrou ne peut être acquis que par un seul thread à la fois. acquis, le verrou sera bloqué. , ou l'acquisition échoue
Lors de l'acquisition du verrou, interrogez d'abord l'inventaire si l'inventaire est supérieur à 0, passez une commande, réduisez l'inventaire, puis libérez le verrou.
Option 2 : Utiliser la base de données Mysql Le verrou pessimiste fourni
Le moteur de stockage Innodb prend en charge le verrouillage au niveau de la ligne Lorsqu'une ligne de données est verrouillée, les autres processus ne peuvent pas opérer sur la ligne de données
Interrogez et verrouillez d'abord la ligne :
select stock_num from table where id=1 for update if(stock_num > 0){ //下订单 update table set stock_num=stock-1 where id=1 }Option 3 : Utiliser la file d'attente pour stocker les demandes de commande de l'utilisateur dans une file d'attente dans l'ordre et utilisez un processus distinct en arrière-plan pour traiter la file d'attente Demande de commande dans Option 4 : utiliser Redis Toutes les opérations Redis sont atomiques. dans redis, et effectuez une opération de diminution sur l'inventaire avant de passer une commande. Si la valeur renvoyée est supérieure ou égale à 0, vous pouvez passer une commande, sinon vous ne pouvez pas passer une commande
if(redis->get('stock_num') > 0){ stock_num = redis->decr('stock_num') if(stock_num >= 0){ //下订单 }else{ //库存不足 } }else{ //库存不足 }
Autres problèmes de concurrence : Dans les applications réelles, dans de nombreux cas, les données seront stockées dans le cache . Lorsque le cache échoue, accédez à la base de données pour récupérer les données et réinitialiser le cache. Si la quantité de concurrence est importante à ce moment-là, de nombreux processus récupéreront les données de la base de données en même temps, ce qui entraînera de nombreuses requêtes <.>
pénétrant dans la base de données et provoquant le crash de la base de données. Les verrous de fichiers peuvent être utilisés pour résoudre ce problème.
Cet article explique comment résoudre la concurrence dans le développement PHP. Plusieurs cas de méthodes d'implémentation du problème ont été trouvé. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.
Recommandations associées :
Comment résoudre le problème selon lequel les données interrogées par php sont tronquées et le code chinois devient Unicode lors de la conversion en json ? Explication des exemples de traversée de tableaux PHPExplication des exemples de classification et de création de tableaux PHPCe 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!