


Analyse des problèmes d'utilisation du verrou exclusif Laravel lockForUpdate()
Test 1 : Tester le verrou exclusif sur la ligne de commande
Premier test sur la ligne de commande, ouvrir deux lignes de commandeD'abord sur la commande ligne 1 Ajoutez un verrou exclusif :
Puis testez l'accès en ligne de commande 2 :
Vous pouvez voir qu'il est effectivement bloqué une fois le commit terminé en ligne de commande. 1, la commande Le résultat de l'exécution est également affiché à la ligne 2.
Il n'y a donc aucun problème à tester les verrous exclusifs à partir de la ligne de commande.
Test 2 : Tester le verrouillage exclusif dans la méthode du contrôleur Laravel
Ce qui suit teste le verrouillage exclusif dans Laravel :Deux routes :
Route::get('/locktest1','LockController@LockTest1');
Route::get('/locktest2','LockController@LockTest2');
Le contenu des deux méthodes
etLockTest1
dans le contrôleur est le même :LockTest2
accédez d'abord à l'itinéraireDB::beginTransaction(); // 开启事务 $goods = Goods::lockForUpdate()->first(); print_r($goods);Copier après la connexion, normal Imprimez les données. Personnellement, je suppose que la transaction n'est pas clôturée pour le moment. S'il y a une autre demande d'accès à la table de données, elle doit être bloquée.
/locktest1
Donc, lorsque je visite
ici, le résultat est que les données sont imprimées normalement. Pourquoi n'y a-t-il pas d'effet de blocage ?/locktest2
Test 3 : Méthode du contrôleur Laravel et test mixte de ligne de commande, verrouillage exclusif
1. Ouvrez d'abord la transaction dans la ligne de commande pour ajouter un. verrouillage exclusif , identique au fonctionnement de la ligne de commande 1 dans le test 1 ;puis accédez à la route
, la page continue de fonctionner, indiquant que les données de la requête sont bloquées/locktest1
enfin validées dans la ligne de commande ;
2. Accédez d'abord à l'itinéraire
et imprimez les données normalement/locktest1
puis ouvrez la transaction dans la ligne de commande pour ajouter un verrou exclusif. La même opération que la ligne de commande 1 dans le test 1 a révélé que les données. a été interrogé normalement sans blocage ; cela signifie que l'opération de verrouillage exclusif dans la méthode du contrôleur de Laravel n'a pas réussi.
Alors, refaites le test suivant :Résumé : Pourquoi lockForUpdate() de laravel n'a-t-il aucun effet ou est-ce qu'après l'exécution de la méthode du contrôleur laravel, la transaction se terminera automatiquement, n'entraîne aucun effet de blocage ?
Ajoutez une méthode sleep() à la méthode contrôleur de la route 1 :
DB::beginTransaction(); // 开启事务 $goods = Goods::lockForUpdate()->first(); print_r($goods);sleep(10);echo 'ddd';
, La page attend d'être actualisée ; lors de l'accès à nouveau à la route 2 /locktest1
, la page attend également d'être actualisée, indiquant que les données sont bloquées, car il n'y a pas de sleep() dans la route 2, et elle est exécutée immédiatement sous des conditions normales. circonstances. /locktest2
Après 10 secondes, la page
imprime les données, et la page /locktest1
imprime également les données. /locktest2
À en juger par cela, le test 3 ci-dessus n'a pas produit d'effet de blocage, qui devrait être provoqué par la fin automatique de la transaction après la fin de la méthode du contrôleur.
Ce qui précède est une analyse personnelle. S'il y a un maître qui passe par là, veuillez laisser un message et dites-moi la bonne réponse ! Pour plus de connaissances liées à la programmation, veuillez visiter :Enseignement de la programmation ! !
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

Laravel - Dump Server - Le serveur de dump Laravel est livré avec la version de Laravel 5.7. Les versions précédentes n'incluent aucun serveur de dump. Le serveur de vidage sera une dépendance de développement dans le fichier laravel/laravel composer.

L'impact du partage des connexions redis dans Laravel Framework et sélectionnez Méthodes Lors de l'utilisation de Laravel Framework et Redis, les développeurs peuvent rencontrer un problème: grâce à la configuration ...

Connexion de la base de données des locataires personnalisés dans le package d'extension multi-locataire Laravel Stancl / location Lors de la construction d'applications multi-locataires à l'aide du package d'extension multi-locataire Laravel Stancl / location, ...

Laravel - URL d'action - Laravel 5.7 introduit une nouvelle fonctionnalité appelée « URL d'action appelable ». Cette fonctionnalité est similaire à celle de Laravel 5.6 qui accepte la méthode string in action. L'objectif principal de la nouvelle syntaxe introduite par Laravel 5.7 est de diriger
