Maison >développement back-end >tutoriel php >Gérer les courses de données avec verrouillage pessimiste à Laravel

Gérer les courses de données avec verrouillage pessimiste à Laravel

百草
百草original
2025-03-05 15:32:18918parcourir

Managing Data Races with Pessimistic Locking in Laravel

Laravel Framework fournit un puissant mécanisme de verrouillage pessimiste pour prévenir efficacement la concurrence des données dans les opérations de base de données simultanées. Les méthodes sharedLock() et lockForUpdate() vous permettent de maintenir la cohérence des données dans des scénarios de concurrence élevés.

sharedLock() La méthode permet la lecture, mais empêche la modification:

DB::table('users')
    ->where('votes', '>', 100)
    ->sharedLock()
    ->get();

Pour un contrôle plus strict, la méthode lockForUpdate() empêche la modification et le partage des verrous en même temps:

DB::table('orders')
    ->where('status', 'pending')
    ->lockForUpdate()
    ->get();

Cette méthode est particulièrement importante dans les transactions financières ou les systèmes de gestion des stocks:

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'];
        });
    }
}

Dans les applications qui doivent assurer la précision des données, plusieurs processus peuvent essayer de modifier les mêmes données en même temps, et ces mécanismes de verrouillage sont cruciaux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn