Er is geen eenvoudige manier om oudere vermeldingen te verwijderen op basis van de TTL/leeftijd. U kunt een combinatie van XTRIM/XDEL
. gebruiken met andere opdrachten om de stream in te korten.
Laten we eens kijken hoe we XTRIM
. kunnen gebruiken
XTRIM-stream MAXLEN ~ SIZE
XTRIM trimt de stream tot een bepaald aantal items en verwijdert indien nodig oudere items (items met lagere ID's).
U genereert de streamgrootte elke dag of periodiek op basis van uw verwijderingsbeleid en slaat deze ergens op met behulp van XLEN
commando
Voer een periodieke taak uit die XTRIM zou aanroepen als
XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)
Gisteren was de streamgrootte bijvoorbeeld 500, nu is het 600, dan moeten we 500 items verwijderen zodat we gewoon kunnen uitvoeren
XTRIM x-stream MAXLEN ~ 100
U kunt verschillende beleidsregels gebruiken voor verwijdering, bijvoorbeeld dagelijks, wekelijks, twee keer per week, enz.
XDEL stream-ID [ID...]
Verwijdert de opgegeven vermeldingen uit een stream en retourneert het aantal verwijderde vermeldingen, dat kan verschillen van het aantal ID's dat aan de opdracht is doorgegeven als bepaalde ID's niet bestaan.
Dus wat u kunt doen is wanneer Service B de gebeurtenis gebruikt, dan kan de service zelf de stream-invoer verwijderen omdat service B de stream-ID kent, maar dit zal niet werken zodra u de consumentengroep gaat gebruiken. Dus ik zou zeggen:gebruik Redis-set of Redis-kaart om de bevestigde stream-ID's bij te houden en voer een periodieke sweep-taak uit om de stream op te schonen.
Bijvoorbeeld
Service A stuurt een stream-item met ID1 naar service BService B bevestigt het stream-item na het consumeren van de items in de mapack_stream ={ID1:true }, u kunt andere gegevens volgen, b.v. tellen in het geval van de consumentengroep.
Een sweep-taak zou periodiek, zoals dagelijks om 1 uur, worden uitgevoerd en alle elementen van ack_stream worden gelezen en alle items worden uitgefilterd die moeten worden verwijderd. Nu kun je XDEL
. bellen commando's in batch met de set stream-ID's.