Verrouillage optimiste ou pessimiste dans le cache
Le besoin de verrouillage se fait sentir chaque fois qu'il existe des ressources partagées dans votre environnement. Les ressources partagées par plusieurs utilisateurs peuvent entraîner une incohérence des données. De tels problèmes peuvent être mieux traités par le verrouillage. Grâce au mécanisme de verrouillage, l'ensemble de données critiques devient tolérant aux pannes, offrant ainsi à l'utilisateur atomicité, cohérence et isolation.
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
NCache vous fournit un mécanisme de verrouillage efficace pour la synchronisation et l'intégrité des données dans le cache mis à jour par différents clients parallèles. NCache le verrouillage interne garantit la cohérence des données sur l'ensemble du cluster de cache pour chaque mise à jour des mêmes données. En plus, NCache vous fournit une API pour verrouiller des données de cache spécifiques, afin qu'un seul thread ou application puisse les mettre à jour ou les lire.
Quand utiliser le verrouillage
Énoncé du problème
Prenons un scénario dans lequel il existe un compte bancaire unique utilisé par deux titulaires de compte. Le compte contient un solde de 5000 1 $. L'utilisateur 2000 souhaite retirer 2 1000 $ du compte et l'utilisateur 4000 souhaite déposer 5000 2000 $ sur le compte. Compte tenu des conditions données, le solde du compte après avoir effectué ces opérations doit être de 3000 3000 $ (1000 4000-XNUMX XNUMX = XNUMX XNUMX et XNUMX XNUMX+XNUMX XNUMX = XNUMX XNUMX).
Considérons maintenant que les deux utilisateurs souhaitent effectuer cette opération sur le compte en même temps et comme il n'y a pas de gestion appropriée pour le scénario, les choses suivantes se produisent :
L'utilisateur 1 vérifie le solde du compte et affiche 5000 2000 $. Il retire 3000 XNUMX $ et le solde total devient XNUMX XNUMX $.
L'utilisateur 2 vérifie le solde du compte et affiche 5000 1000 $. Il dépose 6000 XNUMX $ et le solde total devient XNUMX XNUMX $.
Le diagramme suivant représente visuellement le scénario.
Solution
Pour résoudre ce problème de ressources partagées, vous pouvez utiliser deux approches.
La première approche consiste à verrouiller le compte bancaire pour toute opération ultérieure sur celui-ci lorsqu'un utilisateur effectue déjà une quelconque opération sur celui-ci.
La deuxième approche utilise un mécanisme dans lequel un compte bancaire est ouvert pour être utilisé par les deux utilisateurs, mais la version du compte bancaire est mise à jour concernant l'heure actuelle de chaque opération effectuée. De cette façon, la nouvelle version sera disponible pour les opérations des utilisateurs.
NCache fournit les deux mécanismes de verrouillage connus sous le nom de verrouillage pessimiste et optimiste. Ils sont expliqués plus en détail dans les chapitres successifs.
Types : verrouillage optimiste ou pessimiste
Il existe deux types de verrouillage disponibles avec NCache:
Verrouillage pessimiste (verrouillage exclusif)
Le verrouillage pessimiste est un mécanisme par lequel un élément est exclusivement verrouillé à l'aide d'unLockHandle
grâce à quoi l'élément reste inaccessible aux autres utilisateurs lorsqu'il est verrouillé.Verrouillage optimiste (version des éléments de cache)
Le verrouillage optimiste est un mécanisme dans lequel le contrôle de version d'un élément est utilisé pour verrouiller un élément. Grâce à ce mécanisme, un élément est ouvert à l'utilisation par un autre utilisateur, mais à chaque opération effectuée sur un élément, la version de l'élément se met à jour.
Voir aussi
.RAPPORTER: Alachisoft.NCache.Runtime.Caching espace de noms.
Java: com.alachisoft.ncache.runtime.caching espace de noms.
Node.js : Cache classe.
python: ncache.runtime.caching classe.