Redis XTRIM

Redis Xtrim



Detalls de baix nivell dels fluxos de Redis

Els fluxos de Redis són una estructura de dades només adjunta que proporciona un conjunt d'operacions de lectura i inserció molt eficients amb un mecanisme d'emmagatzematge eficient en memòria. Internament, els fluxos de Redis utilitzen una estructura de dades d'arbre Radix que és un arbre optimitzat per a l'espai amb una alta eficiència de memòria.

Els fluxos de Redis emmagatzemen dades com una llista d'entrades on cada entrada consta de parells clau-valor. A un nivell baix, aquestes entrades estan empaquetades en macronodes, tal com es mostra a continuació.









En aquest article, ens centrem en l'eliminació d'entrades de flux mitjançant l'ordre XTRIM, i el concepte esmentat anteriorment afecta de prop l'eficiència de l'operació d'eliminació. Normalment, l'eliminació de l'entrada de flux de Redis és molt eficient si es fa a nivell de macronode, però no a nivell d'entrada. Aquest mecanisme s'implementa amb l'ordre XTRIM que parlarem a la secció següent.



L'ordre XTRIM

L'ordre XTRIM s'utilitza per tallar les entrades d'un flux en funció d'un valor de llindar determinat. El llindar pot ser un nombre màxim d'entrades per flux o un identificador d'entrada anterior. L'ordre XTRIM accepta el tipus de llindar com a argument de l'ordre. La sintaxi de l'ordre XTRIM és la següent.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] valor_llindar [ LIMIT recompte ]

stream_key : La clau de la riera de Redis.

MAXLEN : la longitud màxima del flux després de retallar les entrades. S'eliminaran totes les entrades que superin la longitud del flux, que s'especifica pel valor llindar. Aquest argument és un nombre enter positiu.

MINID : l'identificador de flux mínim que hauria de quedar després de retallar les entrades. S'eliminaran totes les entrades que tinguin identificacions inferiors al llindar especificat. Sempre que especifiqueu aquest paràmetre, el llindar es converteix en un identificador de flux.

= operador : Quan s'especifiqui, es realitzarà un retall exacte en funció del valor llindar.

~ operador : Quan s'especifiqui, es realitzarà un retall gairebé exacte en funció del valor llindar i la mida del macronode.

valor_llindar : el valor del llindar basat en l'argument MAXLEN o MINID.

LIMIT recompte : el nombre màxim d'entrades que s'han d'eliminar.

Cas d'ús 01: eliminació d'entrades de flux basades en la longitud màxima

Suposem que una empresa turística manté una botiga Redis per fer un seguiment de la informació turística. L'estructura de dades dels fluxos de Redis s'ha utilitzat per emmagatzemar la informació de cada turista com a parells clau-valor. Amb el temps, el flux ha crescut i tenen previst mantenir només les 1000 entrades més recents. Així que han identificat que la longitud màxima del corrent hauria de ser de 1000 en qualsevol moment. S'ha utilitzat l'ordre XTRIM per aconseguir-ho.

Amb finalitats de demostració, primer, crearem un flux amb 10 entrades de la següent manera. S'ha utilitzat l'ordre XADD per dur a terme la inserció.

xad info turística * nom jack país Itàlia familymems 5
xad info turística * nom harry país EUA familymems 2
xad info turística * nom nikomita país japón familymems 3
xad info turística * nom zakaria país índia familymems 2
xad info turística * nom redmond país brasil familymems 6
xad info turística * nom trobat país japon familymems 3
xad info turística * nom maryjohn país EUA familymems 2
xad info turística * nom liza país Itàlia familymems 5
xad info turística * nom nimshikaa país japon familymems 3
xad info turística * nom nisha país Itàlia familymems 5

Utilitzem l'ordre XRANGE per inspeccionar la informació turística del flux de la manera següent.

xrange info turística - +

Sortida:

Com era d'esperar, aquesta ordre ha mostrat les 10 entrades de flux.

Amb finalitats de demostració, retallarem el corrent on la seva longitud màxima seria de 5.

xtrim touristinfo maxlen 5

Inspeccionem de nou les entrades del flux amb l'ordre XRANGE.

Com era d'esperar, s'han desallotjat cinc entrades del corrent, i la seva longitud és de 5.

Cas d'ús 02: eliminació d'entrades de flux basades en identificadors de flux

Prenguem un exemple en què una empresa meteorològica fa un seguiment de la informació meteorològica d'una ubicació determinada mitjançant fluxos de Redis. Ara volen suprimir les entrades més antigues que ja no són necessàries. Podem utilitzar l'ordre XTRIM mitjançant l'estratègia MINID, tal com es mostra a continuació.

Primer, crearem un flux anomenat info meteorològica i afegirem 5 entrades de la següent manera.

Xadd info meteorològica * temp 10 humitat 50
Xadd info meteorològica * temp 20 humitat 70
Xadd info meteorològica * temp 12 humitat 65
Xadd info meteorològica * temp 15 humitat 88
Xadd info meteorològica * temp 18 humitat 45

Sortida:

Utilitzem l'ordre XTRIM per eliminar les entrades que tenen identificadors inferiors al valor de llindar especificat.

xtrim info meteorològica MINID 1660485503248 - 0

L'identificador mínim especificat s'associa amb la tercera entrada. Per tant, se suprimiran les entrades posteriors a la tercera entrada que tinguin identificadors més baixos.

Sortida:

Com que no hem especificat explícitament els arguments = o ~, l'ordre utilitza l'operador = de manera predeterminada. Per tant, s'ha fet el retall exacte en ambdós casos d'ús. Si heu especificat l'operador ~ explícitament, es farà un retall gairebé exacte, tal com es mostra a continuació.

Com es mostra a la figura anterior, l'ordre XTRIM s'ha utilitzat amb l'operador ~. Demanem a l'ordre que elimineu totes les entrades que superin la longitud de 100. Com que no obliguem l'ordre XTRIM a fer un retallat exacte, se centrarà en l'eficiència de l'operació de retallat. Per tant, no eliminarà les entrades immediates que pertanyen al mateix macronode. Mantindrà les tres entrades següents que es troben al mateix macronode i eliminarà tots els macronodes posteriors. Ofereix una millora considerable del rendiment que en l'enfocament de retallament exacte, cosa que obliga l'ordre a fer un esforç addicional. El mateix procediment es fa quan el llindar es basa en els identificadors d'entrada.

L'argument LIMIT limita el nombre d'entrades expulsades del flux especificat, que es pot utilitzar per millorar una mica més el rendiment.

Conclusió

En resum, l'ordre XTRIM s'utilitza per eliminar les entrades de flux basades en un valor de llindar. El tipus del valor llindar es pot canviar amb el context que s'està especificant mitjançant els arguments de l'ordre MAXLEN i MINID. Com s'ha comentat, el retallat es pot fer de dues maneres on l'operació de retallada considerarà el llindar com un límit exacte o aproximat. Per defecte, l'ordre utilitza l'operador = que s'utilitza per tallar exactament. Amb l'operador ~, podeu fer un retall aproximat com s'esmenta a la secció anterior. En general, l'enfocament de retallament aproximat i l'argument LIMIT us ajuden a obtenir un guany de rendiment considerable amb l'ordre XTRIM.