Heim  >  Artikel  >  Backend-Entwicklung  >  Was sind die Parallelitätsmethoden in PHP?

Was sind die Parallelitätsmethoden in PHP?

尚
Original
2019-10-31 13:55:512569Durchsuche

Was sind die Parallelitätsmethoden in PHP?

Mehrere Implementierungsmethoden zur Lösung von Parallelitätsproblemen in der PHP-Entwicklung:

Empfohlen: PHP-Server

Option 1: Datei verwenden Exklusive Sperre sperren

Die Flock-Funktion wird verwendet, um die Dateisperre zu erhalten. Diese Sperre kann nur von einem Thread gleichzeitig erworben werden. Andere Threads, die die Sperre nicht erworben haben, werden entweder blockiert oder die Erfassung schlägt fehl 🎜>

Fragen Sie beim Erwerb der Sperre zunächst den Lagerbestand ab, geben Sie eine Bestellung auf, reduzieren Sie den Lagerbestand und geben Sie dann die Sperre frei.

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

Die Innodb-Speicher-Engine unterstützt Sperren auf Zeilenebene. Wenn eine Datenzeile gesperrt ist, können andere Prozesse die Datenzeile nicht bearbeiten.

Die Zeile zuerst abfragen und sperren:

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: Warteschlange verwenden

Speichern Sie die Bestellanfragen des Benutzers nacheinander in einer Warteschlange und verwenden Sie einen separaten Prozess im Hintergrund, um die Bestellanfragen in der Warteschlange zu verarbeiten

Option 4: Redis verwenden

redis Die Vorgänge sind alle atomar. Sie können den Lagerbestand des Produkts in Redis speichern, bevor Sie eine Bestellung aufgeben, wenn der zurückgegebene Wert größer als oder ist gleich 0, Sie können eine Bestellung aufgeben. Andernfalls ist diese Methode nicht effizienter Wenn der Cache fehlschlägt, rufen Sie die Datenbank auf, um die Daten abzurufen, und setzen Sie den Cache zurück. Wenn die Parallelität sehr groß ist, werden viele Prozesse gleichzeitig an die Datenbank gesendet Bei vielen Anfragen

die in die Datenbank eindringen und zum Absturz der Datenbank führen, können Dateisperren verwendet werden, um dieses Problem zu lösen

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

Das obige ist der detaillierte Inhalt vonWas sind die Parallelitätsmethoden in PHP?. 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