Optimistisches vs. pessimistisches Sperren im Cache
Die Notwendigkeit einer Sperrung entsteht immer dann, wenn in Ihrer Umgebung gemeinsam genutzte Ressourcen vorhanden sind. Von mehreren Benutzern gemeinsam genutzte Ressourcen können zu Dateninkonsistenzen führen. Probleme wie diese lassen sich am besten mit Locking lösen. Mithilfe des Sperrmechanismus wird der kritische Datensatz fehlertolerant, was dem Benutzer Atomizität, Konsistenz und Isolation bietet.
Note
Diese Funktion ist auch in verfügbar NCache Professional.
NCache Bietet Ihnen einen effizienten Sperrmechanismus für die Datensynchronisierung und -integrität innerhalb des Cache-Speichers, der von verschiedenen parallelen Clients aktualisiert wird. NCache Die interne Sperrung gewährleistet die Datenkonsistenz im gesamten Cache-Cluster bei jeder Aktualisierung derselben Daten. Zusätzlich, NCache Bietet Ihnen eine API zum Sperren bestimmter Cache-Daten, sodass nur ein einzelner Thread oder eine einzelne Anwendung sie aktualisieren oder lesen kann.
Wann sollte die Sperre verwendet werden?
Problem Statement
Stellen Sie sich ein Szenario vor, in dem es ein eindeutiges Bankkonto gibt, das von zwei Kontoinhabern genutzt wird. Das Konto weist einen Saldo von 5000 $ auf. Benutzer 1 möchte 2000 $ vom Konto abheben und Benutzer 2 möchte 1000 $ auf das Konto einzahlen. Unter Berücksichtigung der gegebenen Bedingungen muss der Kontostand nach Durchführung dieser Vorgänge 4000 $ betragen (5000-2000 = 3000 und 3000 + 1000 = 4000).
Nehmen wir nun an, dass beide Benutzer diesen Vorgang gleichzeitig für das Konto ausführen möchten und da es keine ordnungsgemäße Handhabung für das Szenario gibt, passieren die folgenden Dinge:
Benutzer 1 prüft den Kontostand und zeigt 5000 $ an. Er hebt 2000 $ ab und der Gesamtsaldo beläuft sich auf 3000 $.
Benutzer 2 überprüft den Kontostand und zeigt 5000 $ an. Er zahlt 1000 $ ein und der Gesamtsaldo beläuft sich auf 6000 $.
Das folgende Diagramm stellt das Szenario visuell dar.
Lösung
Um dieses Problem mit gemeinsam genutzten Ressourcen zu lösen, können Sie zwei Ansätze verwenden.
Der erste Ansatz besteht darin, das Bankkonto für jede weitere Operation zu sperren, wenn ein Benutzer bereits irgendeine Art von Operation damit durchführt.
Der zweite Ansatz besteht darin, einen Mechanismus zu verwenden, bei dem ein Bankkonto für die Nutzung durch beide Benutzer geöffnet ist, die Bankkontoversion jedoch bei jedem durchgeführten Vorgang hinsichtlich der aktuellen Uhrzeit aktualisiert wird. Auf diese Weise steht die neue Version für den Benutzerbetrieb zur Verfügung.
NCache bietet beide Sperrmechanismen, die als pessimistische und optimistische Sperre bekannt sind. Sie werden in den folgenden Kapiteln näher erläutert.
Typen: Optimistische vs. pessimistische Sperrung
Es stehen zwei Arten der Verriegelung zur Verfügung NCache:
Pessimistisches Sperren (exklusives Sperren)
Pessimistisches Sperren ist ein Mechanismus, bei dem ein Gegenstand ausschließlich mit a gesperrt wirdLockHandle
Dadurch bleibt das Element im gesperrten Zustand für andere Benutzer unzugänglich.Optimistisches Sperren (Cache-Element-Versionierung)
Optimistisches Sperren ist ein Mechanismus, bei dem die Elementversionierung zum Sperren eines Elements verwendet wird. Mit diesem Mechanismus ist ein Element für die Verwendung durch einen anderen Benutzer geöffnet, aber bei jedem Vorgang, der an einem Element ausgeführt wird, aktualisiert sich die Elementversion selbst.
Siehe auch
.NETZ: Alachisoft.NCache.Runtime.Caching Namespace.
Java: com.alachisoft.ncache.runtime.caching Namespace.
Node.js: Cache-Speicher Klasse.
Python: ncache.runtime.caching Klasse.