Redis setNX

Redis setNX

Redis -Zeichenfolge Datentyp

Redis ist ein In-Memory-Datenspeicher, der komplexere Datenstrukturen im Vergleich zu anderen Schlüsselwertdatenspeichern unterstützt. Unter all diesen komplexen Datenstrukturen wie Sets, Hashes, Bitmaps und Listen unterstützt sie auch die unkompliziertesten Zeichenfolge -Typen. In diesem Fall kartiert ein String -Schlüssel zu einem String -Wert. Normalerweise werden die Befehle SET und GET verwendet, um Schlüsselwertdaten aus dem Redis-Store zu erstellen und abzurufen. Darüber hinaus erstellt der Befehl SET einen neuen Schlüssel im Speicher und ordnet einen String -Wert zu, nichts weiter als das. Es wird den Wert überschreiben, wenn der Schlüssel bereits vorhanden ist.

Mit dem Befehl SET wird standardmäßig kein Sicherheitsmechanismus implementiert, um die Wertmutationen durch mehrere Kunden gleichzeitig ohne gegenseitige Übereinstimmung zu verarbeiten. Dieser Befehl muss mit vorhandenen Sicherheitsmessungen aufgerufen werden, z. B. ein Sperrmechanismus.

Einen Schlüsselwert bedingt einstellen

Es ist immer besser, ein Sicherheitsmaß zu befolgen, wenn ein Wert mutiert wird, der in einem bestimmten Schlüssel gespeichert ist. Daher hat Redis eine Option in den Befehl SET eingeführt NX Das ist vorhanden und mutiert den Wert eines bereits vorhandenen Schlüssels nicht. Das gleiche Verhalten wurde mit einem neuen Befehl implementiert, der im nächsten Abschnitt erläutert wird.

Der Befehl setNX

Der Befehl setNX, wie der Name schon sagt, “Setzen Sie, wenn nicht existiert “ Dies bedeutet, dass der Befehl nur dann einen Wert festle. Immer wenn der angegebene Schlüssel bereits vorhanden ist, führt der Befehl keine Operation auf diesem Schlüssel durch. Mit dieser Einschränkung ist der Befehl setNX sicherer als der Befehl SET. Darüber hinaus weist dieser Befehl eine konstante Zeitkomplexität auf.

Syntax:

SetNX redis_key value

redis_key: Die eindeutige Kennung eines Redis-Schlüsselwert-Paareintrags.

Wert: Der mit dem Redis -Schlüssel verbundene Wert.

Dieser Befehl gibt eine ganzzahlige Antwort zurück, bei der der 1 bedeutet, dass der Schlüssel mit einem neuen Wert festgelegt wurde. Wenn der zurückgegebene Wert 0 ist, wird der Schlüssel nicht festgelegt, und der vorhandene Schlüssel hält den alten Wert.

Beispiel 01 - Verriegelungsmechanismus mit SetNX

Nehmen wir ein Online -Spiel an, bei dem mehrere Spieler auf einen gemeinsamen Gold -Eimer zugreifen. Die Spieler können auf den goldenen Eimer zugreifen und ihn mit dem Gold füllen, das sie durch Erkundung der Welt gefunden haben. Stellen Sie sich vor, Spieler One greift auf den goldenen Eimer zu und lässt etwas Gold innerhalb eines festgelegten Zeitraums fallen. Gleichzeitig versucht der Spieler zwei, etwas Gold aus demselben Eimer zu konsumieren. In diesem Fall sollte der Zugang nicht an Spieler zwei übergeben werden, bis Spieler One den Gold -Eimer veröffentlicht. Dies kann mit dem Befehl setNX mit einem einfachen Sperrmechanismus implementiert werden.

Der Spieler: 1 kann den Befehl setNX verwenden, um die Gesamtgoldmenge im Eimer einzustellen. Nehmen wir an, wir werden die Goldmenge im Schlüssel aufbewahren Goldbucket.

SetNX Goldbucket 100

Wie erwartet die Goldbucket Der Schlüssel wurde mit einem Wert von 100 erstellt. Jetzt, Spieler: 1 hat das Schloss. Sagen wir Spieler: 2 Rufen Sie den Befehl setNX an, um die neue Goldmenge festzulegen.

SetNX Goldbucket 200

Diesmal gibt der Befehl 0 zurück, weil der Schlüssel Goldbucket existiert. Mit anderen Worten, der Schlüssel wird durch die gesperrt Spieler: 1 bereits. Daher muss der Spieler: 2 warten, bis der Spieler: 1 das Schloss durch Löschen oder automatische Ablauf des Timeouts veröffentlichen.

Überprüfen wir den mit dem verbundenen Wert Goldbucket Schlüssel, wie im Folgenden gezeigt.

Holen Sie sich Goldbucket

Wie erwartet beträgt der Wert immer noch 100, was bedeutet das Spieler: 1 hat den Datenwert bereits gesperrt. Somit, Spieler: 2 muss weiter warten, bis die Zeitüberschreitung abläuft und Spieler: 1 veröffentlicht es.

Es kann eine Deadlock -Situation geben, wenn der Client aufgrund eines Netzwerkfehlers abstürzt oder fehlschlägt und das Schloss nicht vom abgestürzten Client veröffentlicht wurde. Mehrere Clients bemerken dies möglicherweise und versuchen, die Sperre mit dem DEL -Befehl zu entfernen. Infolgedessen löscht jeder Kunde seine eigenen Schlüssel wiederholt, was zu einem Deadlock führt.

Es kann durch jeden Client -Überprüfungen für den Zeitstempel im Voraus mit dem Befehl getset behoben werden und dann die Sperre mit dem Befehl setNX erfasst, wenn der Zeitstempel abgelaufen ist.

Abschluss

Zusammenfassend lässt sich sagen. Wie Sie alle wissen, setzen und erhalten Sie die grundlegendsten Befehle, mit denen Sie Redis-Schlüsselwertepaare erstellen und abrufen können. Die SET-Methode wird verwendet, um Schlüsselwertpaare in der Redis-Datenbank zu erstellen, die schließlich den zugeordneten Wert für einen bestimmten Schlüssel überschreibt, wenn der Schlüssel bereits in der Datenbank vorhanden ist. Wie bereits im Artikel hervorgehoben, kann diese unsichere Wertmutation mit dem Befehl redis setNX eingeschränkt werden. Der Befehl setNX legt den Wert für einen bestimmten Schlüssel fest, wenn der Schlüssel noch nicht vorhanden ist. Immer wenn ein Schlüssel existiert, führt der Befehl nichts aus und gibt 0 zurück. Daher wird der Befehl setNX verwendet, um Sperrmechanismen in Echtzeitanwendungen zu implementieren.