2017-12-31 134 views
1

Ich suche nach einer Möglichkeit, eine Liste von Elementen für einen Benutzer zu speichern, die innerhalb von 24 Stunden abläuft. Gibt es eine Möglichkeit, dies mit Redis zu erreichen? Ich dachte daran, einfach die Liste zu verwenden und für jedes einzelne Element einen Ablauf festzulegen. Gibt es einen besseren Weg?Redis Liste mit ablaufenden Einträgen?

Antwort

3

Nein, Sie können den Ablauf für jedes Element in einem LIST nicht festlegen. Sie können nur einen Ablauf für die gesamte LIST festlegen.

Um dies zu erreichen, was Sie wollen, müssen Sie für jedes Element einen Schlüssel haben:

SET user1:item1 value EX 86400 
SET uesr1:iter2 value EX 86400 
SET user2:item1 value EX 86400 

Um alle Elemente eines bestimmten Benutzers zu erhalten, können Sie den SCAN Befehl mit einem Muster verwenden können (oder Verwendung die Keyspace Notification eine bessere Leistung zu erzielen, aber mit komplexeren Arbeit):

SCAN 0 MATCH user1:* 
2

Wie in der Antwort akzeptiert, Ablauf in Redis bemerkt nur bei Schlüssel-Ebene durchgeführt wird - verschachtelte Elemente nicht abgelaufen sein.

Um eine Liste mit ablaufenden Elementen zu implementieren, können Sie die Datenstruktur Sorted Set verwenden. Die Punktzahl jedes Mitglieds sollte die aktuelle Epoche sein, so dass Sie die Reihenfolge des Einfügens beibehalten. Wenn die Werte (Mitglieder) nicht eindeutig zuzuordnen sind, machen sie so durch die Epoche verketten, z.B .:

ZADD user1:items 1514822755 1514822755:value 
ZADD user1:items 1514822758 1514822758:value 

To „verfallen“ Artikel, rufen Sie ZREMRANGEBYSCORE von -inf und die aktuelle Epoche minus 24 Stunden.

Verwandte Themen