Redis: Implementieren von Expire auf Hash

Erstellt am 28. Okt. 2011  ·  44Kommentare  ·  Quelle: redis/redis

Hallo, ich würde gerne wissen, ob es möglich ist, eine Ablaufzeit für Schlüssel eines Hashs festzulegen?
Zum Beispiel möchte ich die Liste der verbundenen Mitglieder in einem Hash mit einem Ablauf von 5 Minuten für jeden Schlüssel haben.

Ist es möglich?

Danke und sorry im Voraus für mein Englisch.

Grüße, Max

Hilfreichster Kommentar

Nun, ich möchte fast nie einen ganzen Hash auf einmal ablaufen lassen. Sie schlagen also vor, einen Hash in einen Schlüsselbund aufzuteilen. Das funktioniert, aber das gleiche Argument könnte verwendet werden, um zu fragen, warum Sie überhaupt einen Hash brauchen? Es ist von immensem Wert, all Ihre logisch zusammenhängenden Schlüssel zusammenzufassen. Andernfalls müssen Sie diese Abrechnung über einen Satz durchführen, der Ihre Schlüssel speichert, und Sie stoßen auf Probleme mit der referenziellen Integrität. Es ist alles machbar, aber es fühlt sich bei Redis wie eine ziemlich große Unterlassung an, ablaufende einzelne Schlüssel in einem Hash nicht zu unterstützen. Und ich bin nicht davon überzeugt, dass es einen Wert hat, wenn N verschiedene Leute es auf M verschiedene Weisen lösen.

Alle 44 Kommentare

Hallo, es ist nicht möglich, entweder einen anderen Top-Level-Schlüssel für dieses bestimmte Feld zu verwenden oder zusammen mit dem abgelegten Feld ein anderes Feld mit einer Ablaufzeit zu speichern, beides abzurufen und der Anwendung mitzuteilen, ob sie noch gültig ist oder nicht basierend auf aktuelle Uhrzeit.

redis 127.0.0.1:6379> hset verfallen:me name tom
(Ganzzahl) 0
redis 127.0.0.1:6379> hget verfallen:me name
"tom"

redis 127.0.0.1:6379> ablaufen ablaufen:me 10
(Ganzzahl) 1
redis 127.0.0.1:6379> ttl verfallen:me
(Ganzzahl) 8

...
...
...

redis 127.0.0.1:6379> ttl verfallen:me
(Ganzzahl) -1
redis 127.0.0.1:6379> hget verfallen:me name
(Null)

also funktioniert es

Ich glaube, die Anforderung besteht darin, einzelne Felder ablaufen zu lassen. Das Ablaufen des gesamten Hashs ist das gleiche wie das Ablaufen jedes anderen Schlüssels.

Ja, diese Voraussetzung habe ich auch erfüllt. Können einzelne Felder ablaufen?

Gibt es ein spezielles Problem beim Erstellen mehrerer Hashes mit unterschiedlichen Ablaufzeiten?

Nun, ich möchte fast nie einen ganzen Hash auf einmal ablaufen lassen. Sie schlagen also vor, einen Hash in einen Schlüsselbund aufzuteilen. Das funktioniert, aber das gleiche Argument könnte verwendet werden, um zu fragen, warum Sie überhaupt einen Hash brauchen? Es ist von immensem Wert, all Ihre logisch zusammenhängenden Schlüssel zusammenzufassen. Andernfalls müssen Sie diese Abrechnung über einen Satz durchführen, der Ihre Schlüssel speichert, und Sie stoßen auf Probleme mit der referenziellen Integrität. Es ist alles machbar, aber es fühlt sich bei Redis wie eine ziemlich große Unterlassung an, ablaufende einzelne Schlüssel in einem Hash nicht zu unterstützen. Und ich bin nicht davon überzeugt, dass es einen Wert hat, wenn N verschiedene Leute es auf M verschiedene Weisen lösen.

Danke Kevin Menard & Johan Bergström. Tatsächlich habe ich das gleiche Szenario wie hier beschrieben kennengelernt: https://github.com/antirez/redis/issues/242, und ich habe Kommentare von Salvatore gelesen.
Wenn ich alle Felder in Schlüssel wie folgt aufteile : hashkey:field2 ,.. Es ist schwierig, diese Schlüssel als Sammlung zu verwalten. zum Abfragen aller Felder ist KEYS 'patten' erforderlich...

Grüße,
Dengchunping

Dies ist sehr problematisch. Der Grund, warum ich bestimmte Schlüssel in einem Hash ablaufen lassen möchte, ist, dass ich zwischengespeicherte Einstellungen im Hash speichere. Ich möchte die Schlüssel automatisch ablaufen lassen, nachdem ich sie festgelegt habe. Gleichzeitig muss ich in der Lage sein, den gesamten Hash zu töten, wenn alle meine Einstellungen aktualisiert wurden. Also brauche ich die Möglichkeit, diese Einstellungen in die Liste zu bekommen und die Liste zu beenden. ohne alle Instanzen von settings:was auch immer zu finden.

Habe das gleiche Problem mit bjoshuanoah, jetzt verwende ich Schlüssel mit TTL anstelle von Hash, zB:
Hash: Hashname A - Schlüssel B - Wert C
Schlüsselwert: Schlüssel A_B - Wert C

Ist das Fehlen dieser Funktion technisch nicht möglich oder liegt es an der Designwahl?

Die Wahl des Designs führt zu einer Implementierung, die eine Implementierung nicht zulässt.

:+1:

redis selbst unterstützt nicht, diese Funktion ist zu nützlich.

Bis heute plante redis nicht, diese Funktionalität zu implementieren :-(

redis 127.0.0.1:6379> hset verfallen:me name tom
(Ganzzahl) 0
redis 127.0.0.1:6379> hget verfallen:me name
"tom"

redis 127.0.0.1:6379> ablaufen ablaufen:me 10
(Ganzzahl) 1
redis 127.0.0.1:6379> ttl verfallen:me
(Ganzzahl) 8

...
...
...

redis 127.0.0.1:6379> ttl verfallen:me
(Ganzzahl) -1
redis 127.0.0.1:6379> hget verfallen:me name
(Null)

also funktioniert es

Es gibt nur ein Feld in der Hashtabelle, was ist mit mehreren Feldern? Es würde nicht richtig funktionieren!

@oylz - Ich glaube, dass die ursprüngliche Absicht dieser Funktionsanforderung darin besteht, das Ablaufen bestimmter Felder im Hash zuzulassen, nicht des gesamten Schlüssels.

@itamarhaber
wie geht das so?:
hset verfallen:me name1 tom1
hset verfallen:me name2 tom2
hset verfallen:me name3 tom3

ttl verfallen: ich 10

Die gesamte Hashtabelle (expire:me) wird abgelaufen.

@oylz Wir wissen, dass vollständiger Hash abläuft. es funktioniert, aber hier sprechen wir über ein einzelnes Feld eines beliebigen Hashs (wie

@nomi-ramzan
verstehst du wirklich? wie @itamarhaber sagte: "Ich glaube, dass die ursprüngliche Absicht dieser Funktionsanforderung darin besteht, das Ablaufen bestimmter Felder innerhalb des Hashs zuzulassen, nicht des gesamten Schlüssels ."

@nomi-ramzan
sorry, ich habe dir am Anfang falsch geantwortet, ich sollte @wheelq antworten.
z.B:
_redis 127.0.0.1:6379> hset verfallen:me name tom
(Ganzzahl) 0
redis 127.0.0.1:6379> hget verfallen:me name
"tom"

redis 127.0.0.1:6379> ablaufen ablaufen:me 10
(Ganzzahl) 1
redis 127.0.0.1:6379> ttl verfallen:me
(Ganzzahl) 8

...
...
...

redis 127.0.0.1:6379> ttl verfallen:me
(Ganzzahl) -1
redis 127.0.0.1:6379> hget verfallen:me name
(Null)

also funktioniert es_

Das ist 2020, Redis sollte sich das ansehen

Unser Unternehmen hat die Hash-Feldfunktion "Ablaufen" implementiert
it base redis 4.0

Diese Funktion nativ bereitzustellen, wird sehr hilfreich sein.
Vielen Dank.

Darauf warte ich noch

nicht zu glauben! Redis hat es immer noch nicht implementiert!

das gleiche hier, wäre großartig, die Möglichkeit zu haben, Hash-Felder ablaufen zu lassen

+1

nicht zu glauben! Redis hat es immer noch nicht implementiert!

+1 für diese Funktion

Nachdem ich die Redis-Welt entdeckt hatte, stellte ich mir vor, den Cache in dieser Form zu speichern:
1) Jede Hashtabelle - ist meine API-Methode
2) Zeilen in Hash-Tabellen - eine Hash-Funktion der Eingabeparameter der Methode und der Wert ist die Antwort der Methode

+1 für diese Funktion

+1 für diese Funktion

+1

+1

+1

+1

Gibt es einen bestimmten Grund, warum ablaufende Schlüssel in Hashes nicht implementiert sind?

Der Grund, warum dies noch nie implementiert wurde, liegt in der erhöhten Komplexität von Zeit (CPU) und Platz (RAM), die diese Funktion erfordern würde. Das heißt, sag niemals nie.

Liegt die Zeitkomplexität in der Größenordnung der polynomialen Zeit? Was macht es jedoch RAM-intensiv, für jeden Zweck zu klonen?

Ich bin mir sicher, wenn diese Funktion implementiert würde, würde Redis einen enormen Popularitätsschub bekommen

+1 für diese Funktion

+1

+1

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

WhiteTrashLord picture WhiteTrashLord  ·  26Kommentare

qwertywelch picture qwertywelch  ·  23Kommentare

razvanphp picture razvanphp  ·  26Kommentare

mechanomi picture mechanomi  ·  59Kommentare

gimenete picture gimenete  ·  51Kommentare