sql >> Database teknologi >  >> NoSQL >> Redis

Hvordan defineres TTL for redis-streams?

Der er ingen enkel måde at slette ældre poster baseret på TTL/alder. Du kan bruge en kombination af XTRIM/XDEL med andre kommandoer for at trimme strømmen.

Lad os se, hvordan vi kan bruge XTRIM

XTRIM-stream MAXLEN ~ STØRRELSE

XTRIM trimmer strømmen til et givet antal genstande, og fjerner ældre genstande (varer med lavere id'er), hvis det er nødvendigt.

Du genererer strømstørrelsen hver dag eller periodisk baseret på din slettepolitik og gemmer den et sted ved hjælp af XLEN kommando

Kør et periodisk job, der kalder XTRIM som

XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)

For eksempel var strømstørrelsen i går 500 nu er den 600, så skal vi slette 500 poster, så vi bare kan køre

XTRIM x-stream MAXLEN ~ 100

Du kan bruge forskellige politikker til sletning, f.eks. dagligt, ugentligt, to gange om ugen osv.

XDEL stream ID [ID...]

Fjerner de angivne poster fra en strøm og returnerer antallet af slettede poster, som kan være forskelligt fra antallet af id'er, der sendes til kommandoen, hvis visse id'er ikke eksisterer.

Så hvad du kan gøre er, når Service B bruger begivenheden, så kan tjenesten selv slette stream-indgangen, da tjeneste B kender stream-id'et, men dette vil ikke fungere, så snart du begynder at bruge forbrugergruppen. Så jeg vil sige, brug Redis set eller Redis-kort til at spore de anerkendte stream-id'er og køre et periodisk sweep-job for at rydde op i streamen.

For eksempel

Service A sender et stream element med ID1 til service BService B anerkender stream elementet efter at have forbrugt elementerne i mapack_stream ={ ID1:true }, du kan spore andre data f.eks. tæller i tilfælde af forbrugergruppen.

Et sweep-job kører med jævne mellemrum som kl. 01.00 dagligt, der læser alle elementerne i ack_stream og frafiltrerer alle elementer, der kræver sletning. Nu kan du ringe til XDEL kommandoer i batch med sættet af stream-id'er.




  1. Sådan starter du mongo db på windows

  2. find id for seneste underdokument indsat i mongoose

  3. Hvordan håndhæves fremmednøgler i NoSql-databaser (MongoDB)?

  4. Benchmarking-hentning fra redis vs hukommelse i python (ved hjælp af timeit)