Maison >développement back-end >Problème PHP >Quelles sont les solutions de concurrence PHP ?

Quelles sont les solutions de concurrence PHP ?

王林
王林original
2020-11-05 15:03:072881parcourir

Les solutions de concurrence php incluent : 1. Verrouillage de fichiers ; 2. File d'attente de messages, telle que Memcacheq, Redis, etc. que nous utilisons souvent ;

Quelles sont les solutions de concurrence PHP ?

Solution :

(Tutoriel vidéo recommandé : Tutoriel vidéo Java)

1. verrouillage de fichiers

$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 souvent Memcacheq et 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. 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, pas 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é, un ou plusieurs serveurs de file d'attente sont nécessaires

L'achat précipité de Xiaomi et de Taobao est encore légèrement différent. le quota 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.

Recommandations associées : formation php

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