Le contenu de cet article concerne la méthode de réalisation de ventes flash à haute concurrence dans les achats en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Dans les ventes flash, la récupération des billets de train, etc., nous rencontrons généralement des problèmes de concurrence aussi élevés. Je vous propose quatre solutions ci-dessous :
1. . Utiliser le verrouillage des fichiers
$fp = fopen("order.lock", "r"); if(flock($fp,LOCK_EX)){ //..处理订单的代码 flock($fp,LOCK_UN); } fclose($fp);
2. >Nous utilisons couramment Memcacheq et Radis.
Par exemple : s'il y a 100 tickets à récupérer par les utilisateurs, alors vous pouvez 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. Par conséquent, 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 et non une base de données. Cela réduit la pression sur la base de données.
3.
S'il s'agit d'un serveur de cluster distribué, vous avez besoin d'un ou plusieurs serveurs de file d'attenteLes 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. paiement, réduisant le nombre d'éléments couche par couche en un instant.
4
product_lock_key est la clé de verrouillage du ticket
Lorsque product_key existe dans memcached, tous les utilisateurs peuvent entrer dans le processus de commande.
Lorsque vous entrez dans le processus de paiement, stockez d'abord add(product_lock_key, « 1″) dans memcached. Si le retour est réussi, 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.
Recommandations associées :
Solution au débordement de mémoire phpExcel lors de l'exportation de fichiers
Comment implémenter le code QR en PHP Générer et identifier (code)
Quelles sont les méthodes courantes utilisées par PHP pour faire fonctionner Redis ? Résumé des méthodes pour faire fonctionner Redis en PHP (avec code)
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!