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
if(stock_num > 0){ //下订单 update table set stock_num=stock-1 where id=1 }
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{ //库存不足 }
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!