Mehrere Methoden der Parallelitätsverarbeitung in PHP

王林
Freigeben: 2023-04-07 14:32:01
Original
3329 Leute haben es durchsucht

Mehrere Methoden der Parallelitätsverarbeitung in PHP

In Parallelitätsszenarien wie Produktanstürmen kann es zu Überverkäufen kommen. Zu diesem Zeitpunkt ist es notwendig, diese durch Parallelität verursachten Probleme zu lösen.

Es gibt keine native Parallelitätslösung in der PHP-Sprache, daher sind andere Methoden erforderlich, um die Parallelitätskontrolle zu erreichen.

Option 1: Exklusive Dateisperre verwenden

Die Flock-Funktion wird verwendet, um die Dateisperre zu erhalten. Diese Sperre kann nur von einem Thread gleichzeitig erworben werden , und es werden keine anderen Threads erworben. Der Thread, der die Sperre erhält, ist entweder blockiert oder kann sie nicht erwerben. Fragen Sie beim Erwerb der Sperre zunächst den Lagerbestand ab. Wenn der Lagerbestand größer als 0 ist, geben Sie eine Bestellung auf, reduzieren Sie den Lagerbestand und geben Sie dann die Sperre frei.

Option 2: Verwenden Sie die pessimistische Sperre der MySQL-Datenbank

Die Innodb-Speicher-Engine unterstützt Sperren auf Zeilenebene, wenn eine Datenzeile gesperrt ist Auf die Zeile kann nicht zugegriffen werden.

Erste Abfrage und Sperrung der Zeile:

select stock_num from table where id=1 for update
Nach dem Login kopieren
if(stock_num > 0){
//下订单
update table set stock_num=stock-1 where id=1
}
Nach dem Login kopieren

Option 3: Verwenden Sie die Warteschlange

, um die Bestellanfrage des Benutzers nacheinander in einer Warteschlange zu speichern Der Hintergrund verwendet einen separaten Prozess, um Bestellanfragen in der Warteschlange zu bearbeiten.

Option 4: Verwenden Sie Redis

Die Vorgänge von Redis sind alle atomar. Sie können den Warenbestand in Redis speichern und vor dem Platzieren einen Decr-Vorgang für den Bestand durchführen order: Wenn der zurückgegebene Wert größer oder gleich 0 ist, können Sie eine Bestellung aufgeben, andernfalls können Sie keine Bestellung aufgeben. Diese Methode ist effizienter.

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

Empfohlenes Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonMehrere Methoden der Parallelitätsverarbeitung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage