Heim >Backend-Entwicklung >PHP-Problem >Wie geht die PHP-Schnittstelle mit Parallelität um?

Wie geht die PHP-Schnittstelle mit Parallelität um?

(*-*)浩
(*-*)浩Original
2019-10-21 10:25:503635Durchsuche

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

Es ist keine native Bereitstellung in der PHP-Sprache erforderlich andere Möglichkeiten, Parallelitätskontrolle zu erreichen.

Wie geht die PHP-Schnittstelle mit Parallelität um?

Option 1: Exklusive Dateisperre verwenden

Die Flock-Funktion wird verwendet, um die Dateisperre zu erhalten Sperre Es kann nur von einem Thread gleichzeitig erworben werden. Andere Threads, die die Sperre nicht erhalten haben, sind entweder blockiert oder konnten nicht erworben werden. Fragen Sie beim Erwerb der Sperre zunächst den Bestand ab größer als 0, geben Sie eine Bestellung auf und geben Sie dann die Sperre auf (empfohlenes Lernen:

PHP-Video-Tutorial

)

Option 2: Verwenden Sie die von MySQL bereitgestellte pessimistische Sperre Datenbank

Innodb-Speicher Die Engine unterstützt das Sperren auf Zeilenebene. Wenn eine Datenzeile gesperrt ist, können andere Prozesse die Datenzeile nicht abfragen und sperren Zeile zuerst:

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: Verwenden Sie eine Warteschlange

, um die Bestellanfragen des Benutzers nacheinander in einer Warteschlange zu speichern, und verwenden Sie einen separaten Prozess in der Hintergrund zur Verarbeitung der Bestellanfragen in der Warteschlange

Option 4: Verwenden Sie Redis

Die Vorgänge von Redis sind alle atomar. Sie können den Warenbestand in Redis speichern. Führen Sie vor dem Aufgeben einer Bestellung eine Dekretoperation für den Bestand durch, wenn der zurückgegebene Wert größer oder gleich 0 ist. Sie können eine Bestellung aufgeben, andernfalls können Sie keine Bestellung aufgeben.

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

Das obige ist der detaillierte Inhalt vonWie geht die PHP-Schnittstelle mit Parallelität um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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