Det finns inget enkelt sätt att ta bort äldre poster baserat på TTL/åldern. Du kan använda en kombination av XTRIM/XDEL
med andra kommandon för att trimma strömmen.
Låt oss se hur vi kan använda XTRIM
XTRIM-ström MAXLEN ~ STORLEK
XTRIM trimmar strömmen till ett visst antal föremål, avhyser äldre föremål (föremål med lägre ID) om det behövs.
Du genererar strömstorleken varje dag eller med jämna mellanrum baserat på din raderingspolicy och lagrar den någonstans med XLEN
kommando
Kör ett periodiskt jobb som skulle kalla XTRIM som
XTRIM x-stream MAXLEN ~ (NEW_SIZE - PREVIOUS_SIZE)
Till exempel, igår var strömstorleken 500 nu är den 600 och sedan måste vi radera 500 poster så att vi bara kan köra
XTRIM x-stream MAXLEN ~ 100
Du kan använda olika policyer för radering, till exempel dagligen, veckovis, två gånger i veckan, etc.
XDEL-ström-ID [ID...]
Tar bort de angivna posterna från en ström och returnerar antalet raderade poster, som kan skilja sig från antalet ID:n som skickas till kommandot om vissa ID:n inte existerar.
Så vad du kan göra är närhelst tjänst B konsumerar händelsen så kan tjänsten själv radera streamposten eftersom tjänst B känner till stream-ID, men detta kommer inte att fungera så fort du börjar använda konsumentgruppen. Så jag skulle säga att använd Redis set eller Redis map för att spåra bekräftelse av stream-id:n och kör ett periodiskt svepjobb för att rensa upp strömmen.
Till exempel
Service A skickar ett strömobjekt med ID1 till tjänsten BService B bekräftar strömobjektet efter att ha konsumerat objekten i mapack_stream ={ ID1:true }, du kan spåra annan data t.ex. räknas i fråga om konsumentgruppen.
Ett svepjobb skulle köras med jämna mellanrum som klockan 01.00 dagligen som läser alla delar av ack_stream och filtrerar bort alla objekt som kräver radering. Nu kan du ringa XDEL
kommandon i grupp med uppsättningen ström-ID.