Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie definiere ich TTL für Redis-Streams?

Es gibt keine direkte Möglichkeit, ältere Einträge basierend auf dem TTL/Alter zu löschen. Sie können eine Kombination aus XTRIM/XDEL verwenden mit anderen Befehlen, um den Stream zu trimmen.

Mal sehen, wie wir XTRIM verwenden können

XTRIM-Stream MAXLEN ~ SIZE

XTRIM kürzt den Stream auf eine bestimmte Anzahl von Elementen und entfernt bei Bedarf ältere Elemente (Elemente mit niedrigeren IDs).

Sie generieren die Streamgröße täglich oder periodisch basierend auf Ihrer Löschrichtlinie und speichern sie irgendwo mit XLEN Befehl

Führen Sie einen regelmäßigen Job aus, der XTRIM als

aufruft

XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)

Zum Beispiel war gestern die Stream-Größe 500, jetzt sind es 600, dann müssen wir 500 Einträge löschen, damit wir einfach laufen können

XTRIM x-stream MAXLEN ~ 100

Sie können verschiedene Richtlinien zum Löschen verwenden, z. B. täglich, wöchentlich, zweimal pro Woche usw.

XDEL-Stream-ID [ID...]

Entfernt die angegebenen Einträge aus einem Stream und gibt die Anzahl der gelöschten Einträge zurück, die sich von der Anzahl der an den Befehl übergebenen IDs unterscheiden kann, falls bestimmte IDs nicht existieren.

Was Sie also tun können, ist, wann immer Dienst B das Ereignis verbraucht, als der Dienst selbst den Stream-Eintrag löschen kann, da Dienst B die Stream-ID kennt, aber dies funktioniert nicht, sobald Sie beginnen, die Consumer-Gruppe zu verwenden. Ich würde also sagen, verwenden Sie Redis set oder Redis map, um die Acknowledge-Stream-IDs zu verfolgen und einen regelmäßigen Sweep-Job auszuführen, um den Stream zu bereinigen.

Zum Beispiel

Service A sendet ein Stream-Element mit ID1 an Service BService B bestätigt das Stream-Element nach dem Verbrauch der Elemente in mapack_stream ={ ID1:true }, Sie können andere Daten verfolgen, z. zählen im Fall der Verbrauchergruppe.

Ein Sweep-Job würde regelmäßig um 1 Uhr täglich ausgeführt, der alle Elemente von ack_stream liest und alle Elemente herausfiltert, die gelöscht werden müssen. Jetzt können Sie XDEL aufrufen Befehle im Batch mit dem Satz von Stream-IDs.