Heim >Backend-Entwicklung >PHP-Problem >Wie geht die PHP-Schnittstelle mit Parallelität um?
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.
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-TutorialOption 2: Verwenden Sie die von MySQL bereitgestellte pessimistische Sperre DatenbankInnodb-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 WarteschlangeOption 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!