Heim >Backend-Entwicklung >PHP-Tutorial >Fallerkennung mehrerer Implementierungsmethoden zur Lösung von Parallelitätsproblemen in der PHP-Entwicklung

Fallerkennung mehrerer Implementierungsmethoden zur Lösung von Parallelitätsproblemen in der PHP-Entwicklung

jacklove
jackloveOriginal
2018-05-22 18:01:131502Durchsuche

In diesem Artikel wird die Entdeckung mehrerer Implementierungsmethoden zur Lösung von Parallelitätsproblemen in der PHP-Entwicklung erläutert.

Die Beispiele in diesem Artikel beschreiben verschiedene Implementierungsmethoden zur Lösung von Parallelitätsproblemen in der PHP-Entwicklung. Teilen Sie es als Referenz mit allen:

In gleichzeitigen Szenarien wie dem Ansturm von Produkten können zu diesem Zeitpunkt diese durch Parallelität verursachten Probleme gelöst werden

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 gleichzeitig zu erwerben. Andere Threads können dies nicht tun Die erworbene Sperre wird entweder gesperrt oder die Erfassung schlägt fehl. 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: MySQL-Datenbank verwenden Die bereitgestellte pessimistische Sperre

Innodb-Speicher-Engine unterstützt Sperren auf Zeilenebene. Wenn eine Datenzeile gesperrt ist, können andere Prozesse nicht mit der Datenzeile arbeiten

Fragen Sie zuerst die Zeile ab und sperren Sie sie:

   
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 Bestellanfragen des Benutzers in einer Warteschlange zu speichern nacheinander und verwenden Sie einen separaten Prozess im Hintergrund, um die Bestellungen in der Warteschlange zu verarbeiten

Option 4: Verwenden Sie Redis

Die Vorgänge von Redis sind alle atomar Führen Sie vor der Bestellung eine Dekretoperation für den Bestand durch. Wenn der Wert größer oder gleich 0 ist, können Sie eine Bestellung aufgeben effizienter

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

Andere Parallelitätsprobleme:

In realen Anwendungen werden in vielen Fällen Daten vorhanden sein Wenn der Cache ausfällt, gehen Sie zur Datenbank, um die Daten abzurufen und den Cache zurückzusetzen. Wenn die Parallelität zu diesem Zeitpunkt groß ist, werden viele Prozesse gleichzeitig ausgeführt um Daten abzurufen, was dazu führt, dass viele Anfragen

in die Datenbank eindringen und zum Absturz der Datenbank führen. Zur Lösung dieses Problems können Dateisperren verwendet werden

In diesem Artikel werden verschiedene Möglichkeiten zur Lösung von Parallelitätsproblemen erläutert PHP-Entwicklung Implementierungsmethode Fallerkennung, bitte beachten Sie die chinesische PHP-Website für weitere verwandte Inhalte.

Verwandte Empfehlungen:

Wie kann das Problem gelöst werden, dass die von PHP abgefragten Daten verstümmelt sind und der chinesische Code bei der Konvertierung in JSON zu Unicode wird?


Erläuterung von PHP-Array-Traversal-Beispielen


Erklärung von PHP-Array-Klassifizierungs- und Array-Erstellungsbeispielen

Das obige ist der detaillierte Inhalt vonFallerkennung mehrerer Implementierungsmethoden zur Lösung von Parallelitätsproblemen in der PHP-Entwicklung. 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