Explication détaillée du principe de verrouillage optimiste PHP

小云云
Libérer: 2023-03-20 21:06:01
original
2803 Les gens l'ont consulté

1. Pourquoi avons-nous besoin de verrous (contrôle de concurrence) ?

Dans un environnement multi-utilisateurs, plusieurs utilisateurs peuvent mettre à jour le même enregistrement en même temps, ce qui peut provoquer des conflits. C’est le fameux problème de concurrence.
Les conflits typiques sont :
1. Mises à jour perdues : les mises à jour d'une transaction écrasent les résultats de mise à jour d'autres transactions, ce qu'on appelle la mise à jour perdue. Par exemple : l'utilisateur A modifie la valeur de 6 à 2 et l'utilisateur B modifie la valeur de 2 à 6, puis l'utilisateur A perd sa mise à jour.
2. Lecture sale : une lecture sale se produit lorsqu'une transaction lit les enregistrements d'autres transactions à moitié terminées. Par exemple : les valeurs vues par les utilisateurs A et B sont toutes deux 6, l'utilisateur B change la valeur en 2 et la valeur lue par l'utilisateur A est toujours 6.

Afin de résoudre ces problèmes causés par la concurrence. Nous devons introduire un mécanisme de contrôle de concurrence.

2. Mécanisme de contrôle de concurrence

Verrouiller, c'est-à-dire verrouiller les données cibles que nous avons sélectionnées afin qu'elles ne puissent pas être modifiées par d'autres programmes.

1. Verrouillage pessimiste : fait référence à une attitude conservatrice à l'égard des données modifiées par le monde extérieur (y compris d'autres transactions courantes du système et le traitement des transactions provenant de systèmes externes. Par conséquent, pendant tout le processus de traitement des données, le). les données sont dans un état verrouillé
2. Verrouillage optimiste : supposez qu'aucun conflit de concurrence ne se produira et vérifiez uniquement si l'intégrité des données est violée lors de la soumission de l'opération. Le verrouillage optimiste ne peut pas résoudre le problème des lectures sales.

3. Implémentation du verrouillage optimiste
Utilisez le mécanisme d'enregistrement de la version des données (Version) pour implémenter, qui est la méthode d'implémentation la plus couramment utilisée du verrouillage optimiste. Qu'est-ce qu'une version de données ? Il s'agit d'ajouter un identifiant de version aux données, généralement en ajoutant un champ numérique « version » à la table de la base de données. Lors de la lecture des données, lisez ensemble la valeur du champ de version Chaque fois que les données sont mises à jour, la valeur de la version est augmentée de un. Lorsque nous soumettons une mise à jour, nous comparons les informations de version actuelle de l'enregistrement correspondant dans la table de base de données avec la valeur de version extraite pour la première fois si le numéro de version actuel de la table de base de données est égal à la valeur de version extraite pour la première fois. la première fois, elle sera mise à jour. Sinon, elle est considérée comme une donnée expirée

1. Conception de la table de base de données

tâche

comporte trois champs, à savoir l'identifiant, la valeur, version

2. Implémentation

1) Lisez d'abord les données dans la table des tâches (en fait, il n'y a qu'un seul enregistrement dans cette table) et obtenez la valeur de la version sous la forme versionValue

2) Chaque fois que le champ de valeur dans la table des tâches est mis à jour, afin d'éviter qu'un conflit ne se produise, vous devez le faire

mettre à jour la valeur de l'ensemble de tâches = newValue,version = versionValue + 1 où version = versionValue;

Ce n'est que lorsque cette instruction sera exécutée qu'elle indiquera que le champ de valeur est mis à jour cette fois. Valeur réussie

Par exemple, supposons qu'il y ait deux nœuds A et B qui souhaitent être mis à jour. la valeur du champ de valeur dans la table des tâches. Presque au même moment, la valeur de version lue par le nœud A et le nœud B dans la table des tâches est 2. Ensuite, lorsque le nœud A et le nœud B mettent à jour la valeur du champ de valeur, ils exécutent tous deux la tâche de mise à jour. set value = newValue, version = 3 où version = 2;. En fait, un seul nœud exécute avec succès l'instruction SQL. En supposant que le nœud A s'exécute avec succès, la valeur du champ version de la table des tâches est alors 3. Le nœud B effectue ensuite la mise à jour de la valeur de l'ensemble de tâches = newValue, version = 3 où version = 2 ; cette instruction SQL ne sera pas exécutée, garantissant ainsi qu'aucun conflit ne se produit.

Recommandations associées :

Explication détaillée des exemples de verrouillage optimiste et de verrouillage pessimiste Yii2.0

Méthodes pour mettre en œuvre le mécanisme de transaction et le verrouillage optimiste dans Redis

Verrouillage optimiste et pessimiste des transactions de base de données

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!