Redis xdel

Redis xdel

Transmisión de datos con Redis

En el mundo moderno, los datos se generan continuamente a partir de plataformas de redes sociales, sitios web y dispositivos IoT. Por lo tanto, la transmisión de datos es imparable. Se puede identificar una transmisión como una serie de eventos generados a partir de múltiples fuentes concurrentes. Por ejemplo, una estación meteorológica genera datos meteorológicos en una ubicación determinada por hora. Cada evento consiste en datos meteorológicos como temperatura, humedad, velocidad del viento y dirección.

Redis Streams ayudan a capturar, administrar y dar sentido a esta gran cantidad de datos transmitidos.

Por lo general, las fuentes que generan datos o escriben en un flujo se llaman productores. Cada productor agrega una nueva entrada a la transmisión Redis con una ID de evento única donde un evento consiste en uno o más pares de valor de campo similares a un hash Redis. En el otro extremo, los consumidores están leyendo de la transmisión para generar algunas ideas significativas. Los productores y los consumidores no necesitan saber sobre los detalles de implementación de los demás, haciendo que las transmisiones de redis sean más robustas.

Entradas de transmisión de Redis y nodos macro

El tipo de secuencia de Redis se basa en estructuras de datos Radix-Tree ampliamente utilizadas. Por lo general, un árbol Radix consta de varios nodos macro donde un nodo macro puede almacenar múltiples entradas de flujo. Dado que el árbol Radix es un árbol de prefijo optimizado para la memoria, las corrientes de redis se pueden usar con bajo consumo de memoria. Además, los árboles radix subyacentes permiten que las corrientes accedan a los datos al azar o dentro de un rango especificado con mayor eficiencia.

El comando xadd agrega una nueva entrada a un nodo macro en la transmisión. Cuando agrega una entrada, es inmutable. Por lo tanto, se llama una estructura de datos solo de adjudicación.

El comando xdel

En algunos casos, mantener millones de datos de flujo histórico podría no valer la pena debido a la expiración de los datos. Por lo tanto, Redis Streams admite la eliminación de entradas de la estructura de datos y libera algo de memoria. Podemos usar el comando XDEL para eliminar una entrada de un flujo especificado.

Sintaxis:

Xdel [Entry_id…]
  • Clave de flujo: La tecla Redis se usa para identificar una corriente de manera única.
  • Entrada_id: Una transmisión puede tener varias entradas que pertenecen a múltiples nodos macro. El "Entry_id" es el identificador único para identificar una entrada.

El comando xDEL acepta múltiples entry_ids. Por lo tanto, puede eliminar múltiples entradas por comando. Este comando devuelve el recuento de las entradas de transmisión eliminadas. Cada vez que el Entry_ID dado no existe en una transmisión, el recuento devuelto es menor que el recuento de ID especificado.

Mecanismo de deleción de entrada de flujo de redis

El comando XDEL no arroja las entradas de la transmisión de inmediato. En cambio, marca la entrada como eliminada primero. Por lo tanto, la entrada de la corriente seguirá utilizando la memoria asignada. La memoria se lanzará cuando todas las entradas pertenecientes a un nodo macro se hayan marcado eliminado. Obligaría al servidor Redis a liberar la memoria para ese nodo macro.

Ejemplo 1: Eliminar la entrada de datos meteorológicos antiguos de una transmisión

Primero creemos una transmisión para almacenar datos meteorológicos en la ciudad de San Francisco utilizando el comando xadd. Suponga que los sensores producen datos diariamente al mediodía. Por lo tanto, agregaremos datos durante tres días en este ejemplo.

Xadd Sanfranciscoweather * Temp 18.4 Viento 12 Humedad 67
Xadd Sanfranciscoweather * Temp 12.6 viento 5 humedad 34
Xadd Sanfranciscoweather * Temp 5 Viento 1 Humedad 23

Supongamos que la primera entrada es del último mes, y no necesitamos realizar un seguimiento de los datos del mes anterior.

Por lo tanto, podemos usar el comando XDEL para eliminar la primera entrada con la ID 1656493771190-0.

XDEL Sanfranciscoweather 1656493771190-0

El comando XDEL devolvió el entero 1, lo que significa que solo se ha eliminado una entrada del flujo.

Usemos el comando xRange para leer la transmisión y verificar que la ID de entrada 1656493771190-0 se haya marcado como se elimina.

Xrange Sanfranciscoweather - +

Como se esperaba, solo las últimas dos entradas están disponibles y la primera entrada se ha eliminado.

Ejemplo 2: Eliminar múltiples entradas climáticas de una corriente

Digamos que debemos eliminar múltiples entradas de una transmisión simultáneamente. El comando XDEL lo admite. Puede especificar los ID de entrada como se muestra en el siguiente.

Eliminaremos las dos entradas restantes de la transmisión de Sanfranciscoweather que creamos en el ejemplo anterior. El 1656493789125-0 y 1656493802770-0 son las ID de las dos entradas restantes.

XDEL Sanfranciscoweather 1656493789125-0 1656493802770-0

Como se esperaba, el valor de retorno del comando es 2, lo que indica que se han eliminado dos entradas.

Leemos la transmisión

La transmisión de Sanfranciscoweather está vacía.

Conclusión

Redis Streams se puede identificar como una serie de eventos producidos por fuentes concurrentes. Una transmisión puede contener varias entradas donde cada entrada tiene una identificación única y consta de pares de valor de campo. Las transmisiones de Redis se basan en la estructura de datos de Radix Tree, lo que los hace altamente eficientes y optimizados por la memoria. Las entradas agregadas a una transmisión se pueden eliminar utilizando el comando Redis XDEL. Este comando marca la entrada como se elimina en lugar de descargar la entrada y liberar la memoria. Reclama la memoria cuando todas las entradas de un nodo macro están marcadas como eliminadas.