Los datos en la secuencia son inmutables. Los nuevos datos solo se pueden agregar al final de la transmisión. Las transmisiones de Redis pueden contener entradas que no son solo cuerdas. Cada entrada puede contener uno o múltiples pares de valor de campo como en Redis Hashes. Esas entradas tienen una ID única para identificarlas dentro de la transmisión, similar a los números de línea o compensaciones de bytes utilizadas en un archivo de registro. La siguiente ilustración proporcionará una mejor comprensión de cómo se ve la transmisión Redis:
El comando xadd se usa para agregar entradas a un flujo determinado que es sencillo. El mecanismo de acceso a datos es diferente con los tipos de flujo en comparación con otros tipos. El beneficio principal de las transmisiones es que pueden impulsar los mensajes recién agregados a múltiples clientes o consumidores. Es solo una forma de ver las transmisiones de Redis. Además, podemos verlo como una tienda de series de tiempo donde puede iterar sobre toda la transmisión para obtener todas las entradas durante un período de tiempo determinado.
Grupos de consumidores de Redis Stream
Como se mencionó, las secuencias de Redis permiten a varios consumidores leer datos de él. Además, extiende esta funcionalidad a un nivel de acceso a un subconjunto de los mensajes de transmisión por diferentes consumidores. Cada consumidor captará diferentes datos para procesar, mientras que Kafka implementa el mismo comportamiento con los grupos de consumo. La técnica de grupos de consumo está disponible en flujos de redis que permiten distribuir los datos de flujo dados entre múltiples consumidores.
Podemos usar el comando xreadgroup para leer datos a través de un grupo de consumo. Cada grupo de consumo puede contener múltiples consumidores identificados por un nombre único.
El comando xack
Como se mencionó anteriormente, los consumidores dentro de un grupo de consumo reciben mensajes de la transmisión donde las ID de mensaje son mayores que la última ID entregada. Al entregar un mensaje a un consumidor, su estado se establecerá pendiente y almacenado en la lista de entradas pendientes de un grupo de consumidores (PEL). Es un efecto secundario de llamar a los comandos xreadgroup o xclaim. Esto aún haría que el servidor devuelva los mensajes pendientes cada vez que realice una llamada utilizando el comando xreadgroup para obtener el historial de mensajes por consumidor. Por lo tanto, los grupos de consumo de Redis introdujeron un proceso de reconocimiento de mensajes. El comando XACK puede notificar al servidor que se ha procesado correctamente un mensaje recuperado. Eliminaría la entrada para tal mensaje en el PEL.
Sintaxis
XackEl comando xack devuelve el número de entradas reconocidas como respuesta.
Ejemplo: el equilibrador de carga sirve a diferentes clientes de múltiples nodos del servidor
Veamos un escenario del mundo real donde un equilibrador de carga se lee de un flujo de direcciones IP del cliente y sirve a cada cliente de diferentes nodos del servidor. Podemos pensar en esto como un grupo de consumo que lee de un flujo de Redis donde el grupo contiene múltiples nodos de consumo.
Primero, debemos crear un grupo de consumo al que pertenece cada nodo de servidor. Podemos usar el siguiente comando xgroup para crear un grupo de consumo para una transmisión determinada:
XGROUP Crear iPaddressstream UKServerGroup $ MkStreamEl comando se explica por sí mismo, donde el ipaddressstream se ha llamado un nuevo grupo de consumo UKServerGroup que proporciona solo los mensajes más nuevos disponibles para la transmisión cuando un consumidor está conectado. También crea el ipaddressstream transmitir porque el Mkstream Se ha especificado el parámetro.
Luego, debemos agregar varias direcciones IP al ipaddressstream creado previamente usando el siguiente comando Redis XADD:
Xadd ipaddressstream * IP 123.456.12.1Salida después de cada comando:
Esto agregaría 5 entradas al ipaddressstream arroyo. Cada entrada se asigna a una ID única generada por el servidor que ha regresado después de llamar al comando xadd.
Ahora, leamos el ipaddressstream mediante el UkserverGroup's El consumidor llamó servidor0.
Group XreadGroup UKServerGroup Server0 Count 2 Streams iPaddressstream>Producción
Como se esperaba, el servidor0 El consumidor recibe dos mensajes nuevos del ipaddressstream arroyo. Estas dos direcciones IP se han agregado a la lista de entradas pendientes. Si llamamos al comando xreadgroup con la identificación 0, devolverá los mensajes pendientes para el servidor0 consumidor.
El grupo XreadGroup UKServerGroup Server0 transmite ipaddressstream 0Producción
Esto significa que el servidor todavía está esperando el servidor0 consumidor para reconocer estos dos mensajes. Reconocemos los mensajes para el servidor0 consumidor que usa el siguiente comando xack.
XACK iPaddressstream UKServerGroup 1656192378464-0 1656192389344-0Aquí, estamos reconociendo ambas entradas identificadas por las IDS respectivas. El comando devuelve el recuento de los mensajes procesados correctamente también. Son dos en este caso.
Producción
Después del proceso anterior, esos dos mensajes deberían haberse eliminado de la lista de entradas pendientes (PEL). Por lo tanto, la servidor0 El consumidor no devolverá ningún mensaje pendiente al llamar al comando xreadgroup a través del grupo de consumo UKServerGroup.
El grupo XreadGroup UKServerGroup Server0 transmite ipaddressstream 0Producción
Devuelve una matriz vacía, lo que significa que no hay mensajes pendientes para este consumidor. La función de reconocimiento de mensajes es muy útil en ese tipo de escenarios.
Conclusión
Redis viene con el tipo de datos de transmisión cuya implementación subyacente se basa en la estructura de datos de registro. Por lo tanto, las nuevas entradas se agregan al final de la transmisión. La mayor ventaja es que los consumidores múltiples pueden consultar los últimos mensajes agregados a la transmisión. Además, la técnica del grupo de consumo Redis permite la corriente de lectura por un grupo de consumidores donde cada consumidor solo ve un subconjunto de los mensajes de transmisión. Al leer la entrada de un consumidor de la transmisión, dicha entrada se agrega a la lista de entradas pendientes. Por lo tanto, el consumidor necesita reconocer cada uno de los mensajes pendientes. Notificará al servidor que elimine la entrada de PEL y libere la memoria. El comando xack se puede usar para reconocer los mensajes de transmisión redis. Admite reconocer múltiples mensajes a la vez.