Redis: Kann ein Element in einem Array oder einer sortierten Menge ablaufen?


124

Ist es derzeit nur möglich, ein ganzes Schlüssel / Wert-Paar abzulaufen? Was ist, wenn ich einer Listentypstruktur Werte hinzufügen und diese 1 Stunde nach dem Einfügen automatisch entfernen lassen möchte? Ist das derzeit möglich oder muss ein Cron-Job ausgeführt werden, um das Löschen manuell durchzuführen?

Antworten:


76

Ist es derzeit nur möglich, ein ganzes Schlüssel / Wert-Paar abzulaufen?

Soweit ich weiß und auch gemäß den Schlüsselbefehlen und dem Dokument zum Ablauf , können Sie den Ablauf derzeit nur auf einen bestimmten Schlüssel und nicht auf die zugrunde liegende Datenstruktur festlegen. In Google-Gruppen wird jedoch eine Diskussion über diese Funktionalität mit skizzierten alternativen Lösungen geführt.


1
Irgendeine Idee ab Juli 2016 haben sie dies in ihrer neueren Version unterstützt?
Kamran Shahid

1
@KamranShahid hat etwas dazu?
Prakash Kumar

1
Nop Prakash noch nicht.
Kamran Shahid

3
Ist diese Antwort nach 8 Jahren noch relevant?
Simo

2
Ja, das Ablaufen von Elementen in verschachtelten Datenstrukturen wird von Redis nicht unterstützt.
Itamar Haber

94

Es gibt ein allgemeines Muster, das dieses Problem recht gut löst.

Verwenden Sie sortierte Sätze und einen Zeitstempel als Punktzahl. Es ist dann trivial, Elemente nach Bewertungsbereich zu löschen, was in regelmäßigen Abständen oder nur bei jedem Schreibvorgang erfolgen kann, wobei beim Lesen immer die Elemente außerhalb des Bereichs ignoriert werden, indem nur ein Bewertungsbereich gelesen wird.

Mehr hier: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs


7
Gute Lösung, aber ich wünschte, Redis würde dies richtig unterstützen. Dies ist eine häufige Anforderung und sollte keine komplexen Problemumgehungen erfordern.
UpTheCreek

14
Ich weiß nicht, ich bin wirklich froh, dass sie an ihren Waffen festhalten - die Erweiterung der Funktionen auf eine Weise, die sie nicht wollen oder nicht planen, bedeutet, Designopfer zu bringen. Zusätzliche Funktionen aufzubauen, klingt nach der perfekten Lösung und lässt Redis das tun, was es tut
Kieren Johnstone

redis ist perfekt wie es ist - einfaches, sauberes Design und vorhersehbares Verhalten, das zu mehr als hervorragender Leistung führt
let4be

1
Wunderbare Lösung, wir konnten auch eine einfache FIFO-Liste verwenden, in der wir eine Liste geführt und einfach die ersten 5 Elemente übernommen haben. Wenn die Liste je nach Skalierbarkeit größer als 5 + N wurde, löschen wir den Schlüssel und beginnen von vorne. Einfach, leicht und genau so, wie Redis-Algorithmen sein sollten. Dieser Algorithmus gibt unserem Berichtssystem ausreichend Zeit, um die Liste abzufragen und festzustellen, mit welchen Geräten sich Benutzer anmelden. Stimmen Sie mit @KierenJohnstone überein, Redis wurde entwickelt, um Architektur um ihn herum zu schaffen und ist perfekt so, wie es ist.
Ligemer

1

Ich bin auf eine andere Methode gestoßen, weiß nicht, ob es für einen von Ihnen hilfreich ist, aber hier ist:

Der Hash und die sortierte Menge sind durch eine Guid verbunden.

  1. Ich habe einen Hash, der in 'x' Sekunden abläuft
  2. Ich habe einen sortierten Satz, der für Fernabfragen verwendet wird
  3. Die Daten für beide werden in einer Transaktion hinzugefügt. Wenn eine fehlschlägt, schlagen beide fehl.
  4. Verwenden Sie bei einer Fernabfrage 'EXISTS', um festzustellen, ob der Hash-Wert vorhanden ist, wenn die Ergebnisse wiederholt werden
  5. Wenn es nicht vorhanden ist, ist es abgelaufen. Löschen Sie daher das Element aus dem sortierten Satz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.