Redis XTRIM

Redis Xtrim



Details op laag niveau van Redis-streams

Redis-streams zijn een alleen-toevoegende gegevensstructuur die een reeks zeer efficiënte lees- en invoegbewerkingen biedt met een geheugenefficiënt opslagmechanisme. Intern gebruiken de Redis-streams een Radix-boomgegevensstructuur, een voor de ruimte geoptimaliseerde boom met een hoge geheugenefficiëntie.

Redis-streams slaan gegevens op als een lijst met items waarbij elk item uit sleutel-waardeparen bestaat. Op een laag niveau zijn deze items verpakt in macroknooppunten, zoals hieronder wordt weergegeven.









In dit artikel richten we ons op het verwijderen van stream-items met behulp van de XTRIM-opdracht, en het bovengenoemde concept heeft een grote invloed op de efficiëntie van de verwijderingsbewerking. Gewoonlijk is het verwijderen van Redis-streaminvoer zeer efficiënt als het op macroknooppuntniveau wordt gedaan, maar niet op instapniveau. Dit mechanisme wordt geïmplementeerd met het XTRIM-commando dat we in de volgende sectie zullen bespreken.



Het XTRIM-commando

Het XTRIM-commando wordt gebruikt om de invoer van een stream af te sluiten op basis van een bepaalde drempelwaarde. De drempel kan een maximum aantal inzendingen per stream of een ouder inzendings-ID zijn. De XTRIM-opdracht accepteert het type drempel als een opdrachtargument. De syntaxis van de opdracht XTRIM is als volgt.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] drempelwaarde [ LIMIET aantal ]

stream_key : De sleutel van de Redis-stream.

MAXLEN : De maximale lengte van de stream na het bijsnijden van items. Alle vermeldingen die de lengte van de stream overschrijden, die wordt gespecificeerd door de drempelwaarde, worden verwijderd. Dit argument is een positief geheel getal.

MINID : de minimale stream-ID die moet blijven na het bijsnijden van de items. Alle vermeldingen met ID's die lager zijn dan de opgegeven drempel, worden verwijderd. Telkens wanneer u deze parameter opgeeft, wordt de drempel een stream-ID.

= operator : Indien gespecificeerd, wordt exact trimmen uitgevoerd op basis van de drempelwaarde.

~ operator : Indien opgegeven, wordt bijna exact trimmen uitgevoerd op basis van de drempelwaarde en de grootte van de macroknooppunten.

drempelwaarde : De drempelwaarde gebaseerd op het argument MAXLEN of MINID.

LIMIET aantal : Het maximum aantal te verwijderen vermeldingen.

Use Case 01 – Streamitems verwijderen op basis van maximale lengte

Laten we aannemen dat een toeristisch bedrijf een Redis-winkel heeft om toeristische informatie bij te houden. De gegevensstructuur van Redis-streams is gebruikt om de informatie van elke toerist op te slaan als sleutel-waardeparen. Met de tijd is de stream gegroeid en ze zijn van plan om alleen de laatste 1000 inzendingen te behouden. Dus ze hebben vastgesteld dat de maximale lengte van de stream op elk moment 1000 moet zijn. Hiervoor is het XTRIM-commando gebruikt.

Voor demonstratiedoeleinden zullen we eerst als volgt een stream met 10 items maken. De opdracht XADD is gebruikt om de invoeging uit te voeren.

xvoeg toeristische info toe * naam jack land italië familymems 5
xvoeg toeristische info toe * naam harry country usa familymems twee
xvoeg toeristische info toe * naam nikomita land japan familymems 3
xvoeg toeristische info toe * naam zakaria land india familymems twee
xvoeg toeristische info toe * naam redmond land brazilië familymems 6
xvoeg toeristische info toe * naam gevonden land japan familymems 3
xvoeg toeristische info toe * naam maryjohn land usa familymems twee
xvoeg toeristische info toe * naam liza land italië familymems 5
xvoeg toeristische info toe * naam nimshikaa land japan familymems 3
xvoeg toeristische info toe * naam nisha land italië familymems 5

Laten we het XRANGE-commando gebruiken om de stream touristinfo als volgt te inspecteren.

xrange toeristeninfo - +

Uitgang:

Zoals verwacht zijn de 10 stream-items weergegeven door deze opdracht.

Voor demonstratiedoeleinden zullen we de stroom bijsnijden waar de maximale lengte 5 zou zijn.

xtrim touristinfo maxlen 5

Laten we de stream-items opnieuw inspecteren met de opdracht XRANGE.

Zoals verwacht zijn vijf inzendingen uit de stream verwijderd en de lengte is 5.

Use Case 02 – Streamitems verwijderen op basis van stream-ID's

Laten we een voorbeeld nemen waarbij een weerbedrijf de weersinformatie van een bepaalde locatie bijhoudt met behulp van Redis-streams. Nu willen ze oudere vermeldingen verwijderen die niet langer nodig zijn. We kunnen het XTRIM-commando gebruiken met behulp van de MINID-strategie, zoals hieronder wordt getoond.

Eerst zullen we een stream maken met de naam weerinfo en er als volgt 5 items aan toevoegen.

x voeg weersinformatie toe * temp 10 vochtigheid vijftig
x voeg weersinformatie toe * temp twintig vochtigheid 70
x voeg weersinformatie toe * temp 12 vochtigheid 65
x voeg weersinformatie toe * temp vijftien vochtigheid 88
x voeg weersinformatie toe * temp 18 vochtigheid Vier vijf

Uitgang:

Laten we de XTRIM-opdracht gebruiken om de items te verwijderen die ID's hebben die lager zijn dan de opgegeven drempelwaarde.

xtrim weersinformatie MINID 1660485503248 - 0

Het opgegeven minimum-ID is gekoppeld aan het derde item. Daarom worden de vermeldingen na de derde vermelding met lagere ID's verwijderd.

Uitgang:

Omdat we de argumenten = of ~ niet expliciet hebben opgegeven, gebruikt de opdracht standaard de operator =. Daarom is de exacte trimming in beide gevallen uitgevoerd. Als u de ~-operator expliciet hebt opgegeven, wordt bijna exact bijgesneden, zoals hieronder wordt getoond.

Zoals te zien is in de bovenstaande afbeelding, is het XTRIM-commando gebruikt met de ~-operator. We vragen het commando om alle vermeldingen te verwijderen die de lengte van 100 overschrijden. Aangezien we het XTRIM-commando niet dwingen om exact bij te snijden, zal het zich concentreren op de efficiëntie van het bijsnijden. Het verwijdert dus niet de directe vermeldingen die tot hetzelfde macroknooppunt behoren. Het behoudt de volgende drie items die zich in hetzelfde macroknooppunt bevinden en verwijdert alle macroknooppunten daarna. Het geeft een aanzienlijke prestatieverbetering dan bij de exacte trimbenadering, waardoor het commando extra inspanningen moet leveren. Dezelfde procedure vindt plaats wanneer de drempel is gebaseerd op de invoer-ID's.

Het LIMIT-argument beperkt het aantal verwijderde items uit de opgegeven stream, wat kan worden gebruikt om een ​​beetje meer prestatieverbetering te krijgen.

Conclusie

Kortom, het XTRIM-commando wordt gebruikt om stream-items te verwijderen op basis van een drempelwaarde. Het type drempelwaarde kan worden gewijzigd met de context die wordt opgegeven met behulp van de MAXLEN- en MINID-opdrachtargumenten. Zoals besproken, kan het trimmen op twee manieren worden gedaan, waarbij de trimbewerking de drempel als een exacte of geschatte limiet zal beschouwen. Standaard gebruikt de opdracht de = operator die wordt gebruikt voor exact bijsnijden. Met de ~-operator kunt u bij benadering trimmen zoals vermeld in de bovenstaande sectie. Over het algemeen helpen de benadering van bij benadering bijsnijden en het LIMIT-argument u om een ​​aanzienlijke prestatiewinst te behalen met het XTRIM-commando.