Les solutions PHP à haute concurrence incluent : 1. Utilisez la méthode de verrouillage de fichier pour résoudre le problème ; 2. Utilisez la méthode de file d'attente de messages pour résoudre le problème ; 3. S'il s'agit d'un serveur de cluster distribué, une ou plusieurs files d'attente ; des serveurs sont nécessaires ; 4. Utilisez la solution Memcache Lock.
Dans les ventes flash, la récupération des billets de train, etc., nous rencontrons généralement des problèmes de forte concurrence. Les quatre solutions suivantes sont proposées :
( Tutoriel recommandé : Tutoriel graphique php)
1. Utiliser le verrouillage de fichier
$fp = fopen("order.lock", "r"); if(flock($fp,LOCK_EX)){ //..处理订单的代码 flock($fp,LOCK_UN); } fclose($fp);
2 Utiliser la file d'attente des messages
Nous utilisons couramment To Memcacheq. , Radis.
Par exemple : s'il y a 100 tickets à récupérer par les utilisateurs, alors ils peuvent mettre ces 100 tickets dans le cache et ne pas les verrouiller lors de la lecture et de l'écriture. Lorsque le niveau de simultanéité est important, environ 500 personnes peuvent réussir à récupérer des billets, de sorte que les demandes après 500 puissent être directement transférées vers la page statique à la fin de l'événement. Il est impossible pour 400 des 500 personnes qui entrent de se procurer le produit.
Ainsi, seules les 100 premières personnes peuvent acheter avec succès selon l'ordre dans lequel elles entrent dans la file d'attente. Les 400 prochaines personnes accéderont directement à la page de fin de l'événement. Bien entendu, la saisie de 500 personnes n’est qu’un exemple. Vous pouvez ajuster le nombre vous-même. La page de fin d'activité doit utiliser une page statique, pas une base de données. Cela réduit la pression sur la base de données.
(Tutoriel vidéo recommandé : Tutoriel vidéo php )
3 S'il s'agit d'un serveur de cluster distribué, vous avez besoin d'un ou plusieurs serveurs de file d'attente
. Les achats précipités de Xiaomi et de Taobao sont légèrement différents. Xiaomi met l'accent sur le moment de l'achat urgent. Une fois que vous avez récupéré le quota, il vous appartient et vous pouvez passer une commande et régler le paiement. Taobao, quant à lui, se concentre sur le filtrage lors du paiement. Il a mis en œuvre plusieurs niveaux de filtrage. Par exemple, s'il souhaite vendre 10 articles, il permettra à plus de 10 utilisateurs de les récupérer. Il effectuera ensuite un filtrage simultané lors du paiement. , réduisant le nombre d'éléments couche par couche en un instant.
4. Utilisez le verrouillage Memcache
product_lock_key est la clé de verrouillage du ticket.
Lorsque product_key existe dans memcached, tous les utilisateurs peuvent accéder au processus de commande.
Lorsque vous entrez dans le processus de paiement, stockez d'abord add(product_lock_key, « 1″) dans memcached. Si le retour réussit, entrez dans le processus de paiement. S'il échoue, cela signifie que quelqu'un est déjà entré dans le processus de paiement, et le thread attend N secondes et effectue l'opération d'ajout de manière récursive.
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!