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.