Heim> Datenbank> Redis> Hauptteil

So verwenden Sie die optimistische und die pessimistische Sperre von Redis

王林
Freigeben: 2023-05-28 17:58:09
nach vorne
1927 Leute haben es durchsucht

Concept

Redis ist ein In-Memory-Schlüsselwertspeichersystem, das eine Vielzahl von Datenstrukturen unterstützt, einschließlich Zeichenfolgen, Hashes, Listen usw. Redis bietet zwei Sperrmechanismen, nämlich optimistisches Sperren und pessimistisches Sperren.

Optimistische Sperre

Optimistische Sperre ist eine optimistische Parallelitätskontrollstrategie. Sie geht davon aus, dass die Daten in den meisten Fällen nicht von anderen Threads belegt werden. Daher wird die Sperre nicht jedes Mal erfasst, wenn die Daten geändert werden müssen, sondern direkt . Überarbeiten. In Redis kann optimistisches Sperren über die Befehle WATCH und CAS implementiert werden. Der Befehl WATCH wird zum Überwachen eines oder mehrerer Schlüssel verwendet, und der Befehl CAS dient zum Überprüfen und Aktualisieren des Werts des Schlüssels.

Wenn beispielsweise ein Zähler mit dem Schlüsselnamenzähler vorhanden ist, müssen mehrere Clients damit arbeiten. Sie können optimistisches Sperren verwenden, um den Zählerschlüssel vor jeder Client-Operation zu überwachen, indem Sie den WATCH-Befehl

WATCH counter current_count = GET counter new_count = current_count + 1 MULTI SET counter new_count EXEC
Nach dem Login kopieren
Nach dem Login kopieren

ausführen. Bevor der EXEC-Befehl ausgeführt wird, verwenden Sie dann den GET-Befehl, um den Wert des Zählerschlüssels erneut abzurufen und ihn mit dem vorherigen zu vergleichen erhaltene Werte werden verglichen. Wenn die Werte gleich sind, bedeutet dies, dass während des Zeitraums kein anderer Client den Zählerschlüssel geändert hat. Zu diesem Zeitpunkt können Sie den CAS-Befehl verwenden, um den neuen Wert auf den Zählerschlüssel festzulegen. Wenn die Werte unterschiedlich sind, bedeutet dies, dass andere Clients den Zählerschlüssel in diesem Zeitraum geändert haben und der Vorgang erneut ausgeführt werden muss.

GET counter
Nach dem Login kopieren

Pessimistische Sperre

Pessimistische Sperre ist eine pessimistische Parallelitätskontrollstrategie. Sie geht davon aus, dass die Daten in den meisten Fällen von anderen Threads belegt werden. Daher wird jedes Mal, wenn die Daten geändert werden müssen, zuerst die Sperre erworben, um dies sicherzustellen Es gibt keine anderen Threads, die auf diese Daten zugreifen können. In Redis kann pessimistisches Sperren über den WATCH-Befehl implementiert werden, der einen oder mehrere Schlüssel überwachen kann. Wenn sich der Wert eines überwachten Schlüssels während der Transaktionsausführung ändert, wird die gesamte Transaktion zurückgesetzt.

Immer noch das obige Beispiel

WATCH counter current_count = GET counter new_count = current_count + 1 MULTI SET counter new_count EXEC
Nach dem Login kopieren
Nach dem Login kopieren

Wenn andere Clients den Zählerschlüssel während der Ausführung der Transaktion ändern, wird die gesamte Transaktion zurückgesetzt und muss erneut ausgeführt werden.

Obwohl pessimistische Sperren den Vorteil der Datenkonsistenz gewährleisten können, besteht ihr Nachteil darin, dass zuerst die Sperre erworben werden muss, was zu einer Thread-Blockierung führen und dadurch die Parallelitätsleistung beeinträchtigen kann.

Beispiel für eine optimistische Sperre

Angenommen, es gibt eine E-Commerce-Plattform, auf der Benutzer Waren kaufen können. Um sicherzustellen, dass die Reduzierung des Produktbestands konsistent ist, kann der optimistische Sperrmechanismus von Redis verwendet werden, um dies zu erreichen.

Zuerst müssen wir die Bestandsinformationen jedes Artikels in Redis mithilfe einer Hash-Datenstruktur speichern, zum Beispiel:

Wenn der Benutzer dann in der Geschäftslogik einen Artikel kauft, müssen die folgenden Schritte ausgeführt werden: