Laravel Framework bietet einen leistungsstarken pessimistischen Sperrmechanismus, um den Datenkonkurrenten in gleichzeitigen Datenbankoperationen effektiv zu verhindern. Mit den Methoden sharedLock()
und lockForUpdate()
können Sie die Datenkonsistenz in hohen Parallelitätsszenarien aufrechterhalten.
sharedLock()
Ermöglicht das Lesen, verhindert jedoch eine Änderung:
DB::table('users') ->where('votes', '>', 100) ->sharedLock() ->get();
Für strengere Kontrolle verhindert die lockForUpdate()
-Methode die Änderung und das Teilen von Sperren gleichzeitig:
DB::table('orders') ->where('status', 'pending') ->lockForUpdate() ->get();
Diese Methode ist besonders wichtig für Finanztransaktionen oder Bestandsverwaltungssysteme:
class PaymentController extends Controller { public function processPayment($orderId, $amount) { return DB::transaction(function () use ($orderId, $amount) { $account = DB::table('accounts') ->where('order_id', $orderId) ->lockForUpdate() ->first(); if ($account->balance >= $amount) { DB::table('accounts') ->where('order_id', $orderId) ->update(['balance' => $account->balance - $amount]); return ['success' => true, 'message' => 'Payment processed successfully']; } return ['success' => false, 'message' => 'Insufficient funds']; }); } }
In Anwendungen, die die Datengenauigkeit sicherstellen müssen, können mehrere Prozesse versuchen, dieselben Daten gleichzeitig zu ändern, und diese Sperrmechanismen sind entscheidend.
Das obige ist der detaillierte Inhalt vonVerwalten von Datenrennen mit pessimistischem Sperren in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!