Redis EXPIRE-Hash-Schlüssel

Redis Expire Hash Schlussel



Redis-Hashes sind eine spezielle Art von Datentyp, der dem JSON-Objekt, Java HashMap oder einem Python-Wörterbuch viel ähnlicher ist. Darüber hinaus ist es eine Sammlung von Feld-Wert-Paaren, die zum Modellieren von Domänenobjekten verwendet werden können. Die Hash-Datenstruktur von Redis ist äußerst speichereffizient, da jeder Hash-Schlüssel bis zu vier Milliarden Feldwertpaare speichern kann. Am wichtigsten ist, dass die grundlegenden Hash-Operationen wie HSET, HGET, HMGET usw. mit konstanter Zeitkomplexität arbeiten.


Redis-Hash-Schlüssel haben eine unbegrenzte Lebensdauer (TTL), was bedeutet, dass sie dauerhaft sind und explizit mit Befehlen wie DEL gelöscht werden. In diesem Artikel konzentrieren wir uns auf das Festlegen der TTL für Redis-Hashes mit dem Befehl EXPIRE.







Redis EXPIRE-Befehl

Der EXPIRE-Befehl wird verwendet, um ein Timeout für einen bestimmten Schlüssel eines Redis-Hashes, einer Menge, einer Liste usw. festzulegen. Der Redis-Schlüssel wird aus der Datenbank gelöscht, wenn das Timeout abläuft. Am wichtigsten ist, dass das Timeout gelöscht wird, bis der Inhalt des Schlüssels gelöscht oder überschrieben wird. Das Ändern der einem Schlüssel zugeordneten Werte wirkt sich nicht auf die Ablaufzeit aus.



Die Syntax des EXPIRE-Befehls lautet wie folgt:



EXPIRE-Schlüssel expire_time_seconds [ NX | GX | GT | LT ]


Schlüssel: Der Schlüssel des Hashs, der Liste oder des Sets, den Sie zum Festlegen eines Timeouts benötigen.





Ablaufzeit_Sekunden: Der Timeout-Wert in Sekunden.

Der EXPIRE-Befehl akzeptiert mehrere optionale Argumente.



NX: Der Timeout-Wert wird nur gesetzt, wenn der angegebene Schlüssel noch kein Ablaufdatum hat.

XX: Wenn der angegebene Schlüssel einen vorhandenen Zeitüberschreitungswert hat, wird der neue Ablauf festgelegt.

GT: Wenn der neue Timeout-Wert größer als der vorhandene ist, wird der neue Ablauf festgelegt.

LT: Der neue Timeout-Wert wird gesetzt, wenn der vorhandene größer als der neue ist.

Am wichtigsten ist, dass der EXPIRE-Befehl mit konstanter Zeitkomplexität arbeitet. Bei erfolgreicher Befehlsausführung wird der Integer 1 zurückgegeben. Wenn die Operation aufgrund falscher Argumente oder nicht vorhandener Schlüssel fehlschlägt, wird 0 zurückgegeben.

Wir werden den EXPIRE-Befehl für Hashes verwenden, um eine Ablaufzeit festzulegen, wie im folgenden Abschnitt gezeigt:

Redis-Hash mit dem EXPIRE-Befehl ablaufen lassen

Nehmen wir an, dass Sitzungsinformationen pro Benutzer in einem Redis-Hash gespeichert werden Sitzung:ID:1000:Benutzer:10. Wir können den HMSET-Befehl verwenden, um einen Redis-Hash mit mehreren Feld-Wert-Paaren wie folgt zu erstellen:

hmset-Sitzung:ID: 1000 :Benutzer: 10 Nutzername 'ja' Plätzchen 'Jawohl' Passwort '389Ysu2'


Lassen Sie uns den erstellten Hash mit dem Befehl HGETALL untersuchen.

hgetall session:id: 1000 :Benutzer: 10



Außerdem läuft die Sitzung nach 10 Sekunden ab, wenn der Benutzer länger als 60 Sekunden inaktiv ist. Der Sitzungsablauf wird erreicht, indem die Ablaufzeit für den Hash festgelegt wird, der die Sitzungsinformationen speichert.

Wir können den EXPIRE-Befehl wie folgt verwenden:

Sitzung ablaufen lassen: ID: 1000 :Benutzer: 10 10


Wie bereits erwähnt, ist der Timeout-Wert auf 10 Sekunden eingestellt.


Wie erwartet ist der Rückgabewert 1, was bedeutet, dass die TTL für den Hash erfolgreich gesetzt wurde. Lassen Sie uns die verbleibende Zeit überprüfen, bevor der Hash-Schlüssel aus dem Redis-Speicher entfernt wird. Der TTL-Befehl kann wie folgt verwendet werden:

ttl Sitzung:ID: 1000 :Benutzer: 10



Wie in der Ausgabe gezeigt, verbleiben drei Sekunden, bevor der Hash automatisch entfernt wird. Nach 10 Sekunden sieht die Ausgabe des TTL-Befehls wie folgt aus:


Da die ganzzahlige Antwort -2 angezeigt wird, existiert der Hash nicht.

Legen Sie das Timeout basierend auf dem Vorhandensein einer Ablaufzeit fest

Der EXPIRE-Befehl akzeptiert NX- und XX-Argumente, um eine neue Zeitüberschreitung basierend auf dem Vorhandensein eines Ablaufdatums für einen bestimmten Hash festzulegen. Lassen Sie uns einen neuen Hash mit dem erstellen noTimeOut Schlüssel .

hmset noTimeOut-Name 'Prüfung'


Versuchen wir, einen neuen Ablauf für den vorherigen Hash festzulegen. Außerdem übergeben wir das XX-Argument auch an den EXPIRE-Befehl.

verfallen noTimeOut fünfzehn XX


Da wir die angeben XX Option im Befehl wird die Ablaufzeit nicht gesetzt. Mit der Option XX können Sie keine neue Ablaufzeit festlegen, wenn dem angegebenen Hash-Schlüssel kein Timeout zugeordnet ist.


Wenn wir die verwenden NX Option wird der Timeout-Wert auf 15 gesetzt.

verfallen noTimeOut fünfzehn NX



Der EXPIRE-Befehl gibt die Ganzzahl 1 als Antwort zurück, was bedeutet, dass das Timeout richtig eingestellt ist.

Legen Sie das Timeout basierend auf dem vorhandenen Timeout-Wert fest

Die GT- und LT-Optionen können verwendet werden, um die Hash-Ablaufzeit basierend auf der vorhandenen Timeout-Länge festzulegen.

Lassen Sie uns einen neuen Hash namens erstellen hashWithTimeout.

hmset hashWithTimeout Feld1 Wert1


Als nächstes legen wir eine Ablaufzeit von 200 Sekunden für den Hash fest.

hashWithTimeout ablaufen lassen 200


Versuchen wir, ein neues Timeout von 100 Sekunden für den Hash zusammen mit der GT-Option wie folgt festzulegen:

hashWithTimeout ablaufen lassen 100 GT


Da die GT-Option angegeben wurde, prüft der EXPIRE-Befehl, ob der neue Timeout-Wert größer als der vorhandene ist, und setzt die neue Ablaufzeit. In diesem Beispiel ist das neue Timeout nicht größer als das vorhandene Timeout. Daher setzt der Befehl nicht die neue Ablaufzeit und es wird 0 zurückgegeben.


Lassen Sie uns die LT-Option anstelle von GT verwenden. Da die neue Ablaufzeit niedriger als die aktuelle ist, sollte der folgende Befehl das neue Timeout erfolgreich festlegen.

hashWithTimeout ablaufen lassen 100 LT


Fazit

Kurz gesagt, der Redis EXPIRE-Befehl wird verwendet, um einen TTL-Wert für einen bestimmten Schlüssel festzulegen. Standardmäßig sind die Redis-Hash-Schlüssel keinem Timeout zugeordnet, das als nicht flüchtig bezeichnet wird. Wie bereits erwähnt, wird der EXPIRE-Befehl verwendet, um einen Timeout-Wert für den Redis-Hash festzulegen. Normalerweise wird der Hash nach der als Timeout-Wert angegebenen Zeit aus dem Redis-Datenspeicher gelöscht. Wie in den Beispielen gezeigt, akzeptiert der EXPIRE-Befehl einige optionale Argumente wie XX, NX, GT und LT, um den Hash-Ablauf basierend auf einer Bedingung festzulegen.