Maison  >  Article  >  développement back-end  >  Comment l'interface PHP gère-t-elle la concurrence ?

Comment l'interface PHP gère-t-elle la concurrence ?

(*-*)浩
(*-*)浩original
2019-10-21 10:25:503595parcourir

Dans des scénarios de concurrence tels que des ruées sur les produits, une survente peut se produire. À l'heure actuelle, il est nécessaire de résoudre les problèmes causés par la concurrence.

Il n'y a aucune disposition native dans le langage PHP que les solutions de concurrence nécessitent. d'autres moyens d'obtenir un contrôle de concurrence.

Comment l'interface PHP gère-t-elle la concurrence ?

Option 1 : Utiliser le verrouillage exclusif du verrouillage des fichiers

La fonction flock est utilisée pour obtenir le verrouillage des fichiers, ce lock Il ne peut être acquis que par un seul thread à la fois. Les autres threads qui n'ont pas acquis le verrou sont soit bloqués, soit n'ont pas réussi à l'acquérir

Lors de l'acquisition du verrou, interrogez d'abord l'inventaire. supérieur à 0, passez une commande puis libérez le verrou (apprentissage recommandé : Tutoriel vidéo PHP)

Option 2 : Utiliser le verrou pessimiste fourni par Mysql. base de données

Stockage Innodb Le moteur 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

Interroger et verrouiller la ligne. première 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 une file d'attente

pour stocker les demandes de commande de l'utilisateur dans une file d'attente en séquence et utiliser un processus distinct dans le en arrière-plan pour traiter les demandes de commande dans la file d'attente

Option 4 : Utiliser Redis

Les opérations de redis sont toutes atomiques. Vous pouvez stocker l'inventaire des marchandises dans redis. Avant de passer une commande, effectuez une opération de diminution sur l'inventaire. Si la valeur renvoyée est supérieure ou égale à 0, etc. Vous pouvez passer une commande, sinon vous ne pouvez pas passer une commande. Cette méthode est plus efficace

if(redis->get('stock_num') > 0){
 stock_num = redis->decr('stock_num')
 if(stock_num >= 0){
 //下订单
 }else{
 //库存不足
 }
}else{
//库存不足
}
.

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