Redis: ejemplo de uso del comando Stream Message Queue

Tabla de contenido

XADD

XTRIM

XREAD

XGROUP

GRUPO XREADGROUP


​​​​​​​

Redis Stream es una estructura de datos recién agregada en la versión Redis 5.0.

Redis Stream se utiliza principalmente para colas de mensajes (MQ, Message Queue). Redis tiene una función de publicación y suscripción (pub / sub) de Redis para implementar la función de cola de mensajes, pero tiene la desventaja de que el mensaje no puede persistir. Si hay una desconexión de la red, tiempo de inactividad de Redis, etc., el mensaje se descartará.

En pocas palabras, publicar y suscribirse (pub / sub) puede distribuir mensajes, pero no puede registrar mensajes históricos.

Redis Stream proporciona persistencia de mensajes y funciones de replicación de copia de seguridad maestra, lo que permite a cualquier cliente acceder a los datos en cualquier momento, recordar la ubicación del acceso de cada cliente y garantizar que el mensaje no se pierda.

La estructura de Redis Stream es la siguiente. Tiene una lista de mensajes vinculados, que vincula todos los mensajes agregados. Cada mensaje tiene una identificación única y el contenido correspondiente:

Cada Stream tiene un nombre único, que es la clave de Redis, que se crea automáticamente cuando usamos el comando xadd para agregar un mensaje por primera vez.

Análisis de la imagen de arriba:

  • Grupo de consumidores  : grupo de consumidores, creado mediante el comando XGROUP CREATE, un grupo de consumidores tiene varios consumidores (consumidores).
  • last_delivered_id  : cursor, cada grupo de consumidores tendrá un cursor last_delivered_id, cualquier consumidor que lea el mensaje hará que el cursor last_delivered_id avance.
  • Pendientes_ids  : variables de estado de los consumidores (Consumidor), que se utilizan para mantener identificadores de consumidores no confirmados. Pendiente_ids registra los mensajes que el cliente lee actualmente, pero no hay ack (carácter de reconocimiento).

XADD

Use XADD para agregar mensajes a la cola. Si la cola especificada no existe, cree una cola. Formato de sintaxis XADD:

XADD key ID field value [field value ...]
  • clave  : el nombre de la cola, créelo si no existe
  • ID  : El ID del mensaje, usamos * para indicar que es generado por redis y se puede personalizar, pero es necesario asegurarse de que sea incremental.
  • valor de campo  : registro. 

Xdel y xlength no se presentarán mucho, vamos a presentar xtrim.

XTRIM

xtrim recorta la secuencia eliminando las entradas más antiguas (entradas con ID más bajos).

El arroyo se puede podar usando una de las siguientes estrategias:

  • MAXLEN: Siempre que la longitud de la transmisión exceda el valor especificado threshold, la thresholdentrada será expulsada, que es un número entero positivo.
  • MINID: Entradas de desalojo thresholdcon ID inferiores , donde thresholdes el ID de flujo.

Por ejemplo, esto recortará la transmisión exactamente a los últimos 1000 elementos:

XTRIM mystream MAXLEN 1000

En este ejemplo, todas las entradas con ID inferiores a 649085820-0 serán desalojadas:

XTRIM mystream MINID 649085820

De forma predeterminada, o cuando se proporcionan parámetros opcionales, el comando realizará un recorte preciso.

Según la estrategia, un recorte preciso significa:

  • MAXLEN: La longitud de la secuencia recortada será exactamente la mínima entre su longitud original y la longitud especificada threshold.
  • MINID: El ID más antiguo de la secuencia es exactamente el valor más pequeño entre su ID más antiguo original y el valor especificado threshold.

XREAD

Utilice XREAD para obtener la lista de mensajes de forma bloqueante o no bloqueante, el formato de sintaxis:

XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]
  • contar  : número
  • milisegundos  : opcional, la cantidad de milisegundos para bloquear, si no se establece, no es bloqueante
  • clave  : el nombre de la cola
  • id  : ID de mensaje

A veces, al bloquear, solo queremos recibir las entradas agregadas a la transmisión a través de xadd desde el momento del bloqueo. En este caso, no estamos interesados ​​en el historial de los elementos agregados. En este caso, usaremos $

Arriba vamos a buscar los datos agregados al flujo desde el momento del bloqueo.

XGROUP

Utilice este comando para administrar los grupos de consumidores asociados con la estructura de datos del flujo, puede:

  • Cree un nuevo grupo de consumidores asociado con la transmisión.
  • Eliminar un grupo de consumidores.
  • Eliminar a un consumidor específico del grupo de consumidores.
  • Establezca el último ID entregado del grupo de consumidores con otro nombre.

Para crear un nuevo grupo de consumidores, utilice el siguiente formulario:

XGROUP CREATE mystream consumer-group-name $

El último parámetro es el ID del último artículo que se considerará para la entrega en la secuencia. En el caso anterior, usamos el ID especial '$' (que significa: el ID del último elemento de la secuencia). En este caso, los consumidores que obtienen datos de ese grupo de consumidores solo verán la llegada de nuevos elementos al flujo.

Por el contrario, si desea que el consumidor obtenga el historial de flujo completo, use cero como el ID inicial del grupo de consumidores:

XGROUP CREATE mystream consumer-group-name 0

Por supuesto, también se puede utilizar cualquier otra identificación válida. Si el grupo de usuarios especificado ya existe, el comando devolverá -BUSYGROUPun error. De lo contrario, realice la operación y regrese OK. No existe un límite estricto en la cantidad de grupos de consumidores que se pueden asociar con una transmisión determinada.

Si la secuencia especificada al crear el grupo no existe, se devolverá un error. Puede utilizar el MKSTREAMsubcomando opcional como último parámetro IDpara crear automáticamente un flujo si no existe. Tenga en cuenta que si la transmisión se crea de esta manera, su longitud será 0:

XGROUP CREATE mystream consumer-group-name $ MKSTREAM

Un grupo de consumidores se puede destruir por completo utilizando el siguiente formulario:

XGROUP DESTROY mystream consumer-group-name

Incluso si hay consumidores activos y mensajes pendientes, el grupo de consumidores se destruirá, así que asegúrese de llamar a este comando solo cuando realmente lo necesite.

Siempre que un comando menciona un nuevo nombre de consumidor, se crea automáticamente el consumidor del grupo de consumidores. También se pueden crear explícitamente utilizando el siguiente formulario:

XGROUP CREATECONSUMER mystream consumer-group-name myconsumer123

Para eliminar a un consumidor determinado del grupo de consumidores, se puede utilizar el siguiente formulario:

XGROUP DELCONSUMER mystream consumer-group-name myconsumer123

A veces puede resultar útil eliminar los consumidores antiguos porque ya no se utilizan. Este formulario devuelve el número de mensajes pendientes que tiene el usuario antes de ser eliminado.

Por último, puede utilizar SETIDsubcomandos para configurar el siguiente mensaje que se enviará. Por lo general, la siguiente ID se establece como último parámetro al crear un usuario XGROUP CREATE. Sin embargo, puede modificar la siguiente ID más tarde utilizando este formulario sin tener que eliminar y crear el grupo de usuarios nuevamente. Por ejemplo, si desea que los consumidores del grupo de consumidores reprocesen todos los mensajes de la transmisión, puede establecer su siguiente ID en 0:

XGROUP SETID mystream consumer-group-name 0

GRUPO XREADGROUP

Utilice XREADGROUP GROUP para leer los mensajes en el grupo de consumidores, el formato de sintaxis:

XREADGROUP GROUP grupo consumidor [COUNT count] [BLOCK milisegundos] [NOACK] Tecla STREAMS [clave ...] ID [ID ...]
  • grupo  : nombre del grupo de consumidores
  • consumidor  : nombre del consumidor.
  • count  : el número de lecturas.
  • milisegundos  : el número de milisegundos para bloquear.
  • clave  : el nombre de la cola.
  • ID  : ID del mensaje.
XREADGROUP GROUP nombre-grupo-consumidor nombre-consumidor COUNT 1 STREAMS mystream>

 

Supongo que te gusta

Origin blog.csdn.net/weixin_40179091/article/details/114943752
Recomendado
Clasificación