sql >> Databasteknik >  >> NoSQL >> Redis

Hur definierar man TTL för redis-strömmar?

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.




  1. Hur får man Redis att börja på Heroku?

  2. Är det möjligt att få fälten i projektionsordning i Aggregation Frameworks mongo

  3. Python &Redis:Bästa tillvägagångssätt för Manager/Worker-applikationer

  4. Kan jag fråga MongoDB ObjectId efter datum?