Redis XTRIM

Redis Xtrim



Detalles de bajo nivel de Redis Streams

Los flujos de Redis son una estructura de datos de solo anexar que proporciona un conjunto de operaciones de lectura e inserción altamente eficientes con un mecanismo de almacenamiento eficiente en memoria. Internamente, los flujos de Redis utilizan una estructura de datos de árbol Radix, que es un árbol de espacio optimizado con alta eficiencia de memoria.

Redis transmite datos almacenados como una lista de entradas donde cada entrada consta de pares clave-valor. En un nivel bajo, estas entradas se empaquetan en macronodos, como se muestra a continuación.









En este artículo, nos estamos enfocando en la eliminación de entradas de flujo usando el comando XTRIM, y el concepto mencionado anteriormente afecta de cerca la eficiencia de la operación de eliminación. Por lo general, la eliminación de entradas de flujo de Redis es muy eficiente si se realiza en el nivel de macronodo pero no en el nivel de entrada. Este mecanismo se implementa con el comando XTRIM que discutiremos en la siguiente sección.



El Comando XTRIM

El comando XTRIM se usa para cortar las entradas de un flujo en función de un valor de umbral determinado. El umbral puede ser un número máximo de entradas por transmisión o una identificación de entrada más antigua. El comando XTRIM acepta el tipo de umbral como argumento del comando. La sintaxis del comando XTRIM es la siguiente.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] valor_umbral [ LÍMITE de recuento ]

Clave de flujo : La clave de la corriente de Redis.

MAXLÉN : La longitud máxima de la secuencia después de recortar las entradas. Se eliminarán todas las entradas que excedan la longitud de la secuencia, que se especifica mediante el valor de umbral. Este argumento es un entero positivo.

MINID : El ID de flujo mínimo que debe permanecer después de recortar las entradas. Se eliminarán todas las entradas que tengan ID inferiores al umbral especificado. Cada vez que especifica este parámetro, el umbral se convierte en un ID de transmisión.

= operador : Cuando se especifica, se realizará un recorte exacto en función del valor de umbral.

~ operador : cuando se especifica, se realizará un recorte casi exacto en función del valor de umbral y el tamaño del macronodo.

valor_umbral : El valor de umbral basado en el argumento MAXLEN o MINID.

LÍMITE de recuento : El número máximo de entradas que se eliminarán.

Caso de uso 01: eliminación de entradas de transmisión en función de la longitud máxima

Supongamos que una empresa de turismo mantiene una tienda Redis para realizar un seguimiento de la información turística. La estructura de datos de flujos de Redis se ha utilizado para almacenar la información de cada turista como pares clave-valor. Con el tiempo, la corriente ha crecido y planean mantener solo las últimas 1000 entradas. Por lo tanto, han identificado que la longitud máxima de la transmisión debe ser de 1000 en cualquier momento. El comando XTRIM se ha utilizado para lograr esto.

Para fines de demostración, primero, crearemos una secuencia con 10 entradas de la siguiente manera. Se ha utilizado el comando XADD para realizar la inserción.

xañadir información turística * nombre jack país italia familymems 5
xañadir información turística * nombre harry país estados unidos familymems 2
xañadir información turística * nombre nikomita país japón familymems 3
xañadir información turística * nombre zakaria país india familymems 2
xañadir información turística * nombre redmond país brasil familymems 6
xañadir información turística * nombre encontrado país japón familymems 3
xañadir información turística * nombre maryjohn país estados unidos familymems 2
xañadir información turística * nombre liza país italia familymems 5
xañadir información turística * nombre nimshikaa país japón familymems 3
xañadir información turística * nombre nisha país italia familymems 5

Usemos el comando XRANGE para inspeccionar el flujo de información turística de la siguiente manera.

información turística xrange - +

Producción:

Como era de esperar, este comando ha mostrado las 10 entradas de flujo.

Para fines de demostración, recortaremos la secuencia donde su longitud máxima sería 5.

xtrim información turística maxlen 5

Inspeccionemos las entradas de flujo nuevamente con el comando XRANGE.

Como era de esperar, se han eliminado cinco entradas de la transmisión y su longitud es de 5.

Caso de uso 02: eliminación de entradas de transmisión en función de los ID de transmisión

Tomemos un ejemplo en el que una compañía meteorológica realiza un seguimiento de la información meteorológica de una ubicación determinada utilizando flujos de Redis. Ahora, quieren eliminar las entradas más antiguas que ya no se necesitan. Podemos usar el comando XTRIM usando la estrategia MINID, como se muestra a continuación.

Primero, crearemos una transmisión llamada weatherinfo y le agregaremos 5 entradas de la siguiente manera.

xañadir información meteorológica * temperatura 10 humedad 50
xañadir información meteorológica * temperatura 20 humedad 70
xañadir información meteorológica * temperatura 12 humedad 65
xañadir información meteorológica * temperatura 15 humedad 88
xañadir información meteorológica * temperatura 18 humedad 45

Producción:

Usemos el comando XTRIM para eliminar las entradas que tienen ID inferiores al valor de umbral especificado.

información meteorológica xtrim MINID 1660485503248 - 0

La identificación mínima especificada está asociada con la tercera entrada. Por lo tanto, se eliminarán las entradas posteriores a la tercera entrada que tengan identificadores más bajos.

Producción:

Dado que no hemos especificado explícitamente los argumentos = o ~, el comando usa el operador = de forma predeterminada. Por lo tanto, se ha realizado el recorte exacto en ambos casos de uso. Si ha especificado el operador ~ explícitamente, se realizará un recorte casi exacto, como se muestra a continuación.

Como se muestra en la figura anterior, el comando XTRIM se ha utilizado con el operador ~. Le pedimos al comando que elimine todas las entradas que superen la longitud de 100. Dado que no obligamos al comando XTRIM a realizar un recorte exacto, se centrará en la eficiencia de la operación de recorte. Por lo tanto, no eliminará las entradas inmediatas que pertenecen al mismo macronodo. Mantendrá las siguientes tres entradas que están en el mismo macro-nodo y eliminará todos los macro-nodos después de esos. Brinda una cantidad considerable de mejora en el rendimiento que en el enfoque de recorte exacto, lo que obliga al comando a realizar un esfuerzo adicional. El mismo procedimiento tiene lugar cuando el umbral se basa en los identificadores de entrada.

El argumento LIMIT limita la cantidad de entradas desalojadas del flujo especificado, que se puede usar para obtener una mejora un poco más en el rendimiento.

Conclusión

En resumen, el comando XTRIM se usa para eliminar entradas de flujo en función de un valor de umbral. El tipo del valor de umbral se puede cambiar con el contexto que se especifica usando los argumentos de comando MAXLEN y MINID. Como se ha comentado, el recorte se puede realizar de dos formas en las que la operación de recorte considerará el umbral como un límite exacto o aproximado. De manera predeterminada, el comando usa el operador = que se usa para el recorte exacto. Con el operador ~, puede hacer un recorte aproximado como se menciona en la sección anterior. En general, el enfoque de recorte aproximado y el argumento LIMIT lo ayudan a obtener una ganancia de rendimiento considerable con el comando XTRIM.