Mensajería Pub/Sub de Redis

RedisBeginner
Practicar Ahora

Introducción

En este laboratorio, explorarás el sistema de mensajería Pub/Sub (Publicación/Suscripción) de Redis. Aprenderás a suscribirte a canales, publicar mensajes y cancelar suscripciones. Este laboratorio te guiará a través de las operaciones fundamentales utilizando los comandos SUBSCRIBE, PUBLISH, UNSUBSCRIBE y PSUBSCRIBE.

Suscribirse a un canal con SUBSCRIBE

En este paso, aprenderás cómo suscribirte a un canal en Redis utilizando el comando SUBSCRIBE. Suscribirte a un canal te permite recibir los mensajes que se publiquen en él. Este es un concepto fundamental en el sistema de mensajería Pub/Sub de Redis.

Terminal 1: Suscribirse al canal

Abre tu primera terminal (la llamaremos Terminal 1). Puedes utilizar la terminal Xfce proporcionada en el entorno de LabEx.

Conéctate al servidor de Redis usando el comando redis-cli:

redis-cli

Deberías ver el indicador (prompt) de Redis: 127.0.0.1:6379>.

Suscríbete a un canal llamado mychannel usando el comando SUBSCRIBE:

SUBSCRIBE mychannel

La salida será similar a esta:

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1

Analicemos la salida:

  • "subscribe": Indica que te has suscrito exitosamente a un canal.
  • "mychannel": Es el nombre del canal al que te suscribiste.
  • (integer) 1: Es la cantidad de canales a los que estás suscrito actualmente.

Importante: Mantén la Terminal 1 abierta con la sesión de redis-cli activa y suscrita al canal. NO cierres esta terminal ni presiones Ctrl+C, ya que esto cancelaría tu suscripción al canal. Usaremos una segunda terminal para publicar mensajes en el siguiente paso.

Publicar mensajes con PUBLISH

En este paso, aprenderás a publicar mensajes en un canal de Redis utilizando el comando PUBLISH. La publicación de mensajes es la funcionalidad principal del sistema Pub/Sub, permitiéndote enviar datos a todos los suscriptores de un canal específico.

Terminal 2: Publicar mensajes

Abre una segunda terminal (la llamaremos Terminal 2). Puedes abrir una nueva pestaña en tu terminal Xfce.

Conéctate al servidor de Redis usando el comando redis-cli:

redis-cli

Deberías ver el indicador (prompt) de Redis: 127.0.0.1:6379>.

Ahora, publica un mensaje en el canal mychannel usando el comando PUBLISH:

PUBLISH mychannel "Hello, Redis!"

La salida en la Terminal 2 mostrará el número de clientes que recibieron el mensaje:

(integer) 1

En este caso, la salida es (integer) 1 porque tienes una suscripción activa a mychannel en la Terminal 1 desde el paso anterior.

Observar el mensaje en la Terminal 1

Ahora regresa a la Terminal 1 (donde te suscribiste a mychannel en el Paso 1). Deberías ver el mensaje que acabas de publicar mostrado en tiempo real:

1) "message"
2) "mychannel"
3) "Hello, Redis!"

Esto muestra lo siguiente:

  • "message": Indica que se trata de un mensaje publicado.
  • "mychannel": El canal en el cual se publicó el mensaje.
  • "Hello, Redis!": El contenido real del mensaje.

Probar la mensajería en tiempo real

Ahora puedes experimentar con la mensajería en tiempo real:

  1. Vuelve a la Terminal 2 y publica más mensajes.
  2. Cambia a la Terminal 1 para ver cómo aparecen al instante.
  3. Prueba a publicar diferentes mensajes para observar la comunicación en directo.

Ejemplo - en la Terminal 2:

PUBLISH mychannel "This is message 2"
PUBLISH mychannel "Real-time messaging works!"

Importante: Mantén tanto la Terminal 1 como la Terminal 2 con sus sesiones de redis-cli activas. Continuaremos usando ambas terminales en los siguientes pasos.

Cancelar suscripción con UNSUBSCRIBE

En este paso, aprenderás a cancelar la suscripción a un canal en Redis utilizando el comando UNSUBSCRIBE. Cancelar la suscripción elimina a un cliente de la lista de suscriptores de un canal específico, evitando que reciba más mensajes publicados en dicho canal.

Terminal 1: Salir del modo de suscripción

Dirígete a la Terminal 1 (donde actualmente estás suscrito a mychannel). Deberías ver el estado de suscripción indicando "Reading messages... (press Ctrl-C to quit)".

Dado que la Terminal 1 se encuentra en modo de suscripción, no puedes ejecutar comandos habituales de Redis directamente. Para cancelar la suscripción, primero debes salir del modo de suscripción:

  1. Presiona Ctrl+C para salir del modo de suscripción.

  2. Deberías notar que la sesión de redis-cli finaliza y regresa al indicador de la terminal.

  3. Vuelve a conectarte a Redis:

    redis-cli
    
  4. Ahora puedes ejecutar el comando UNSUBSCRIBE (aunque no es estrictamente necesario, ya que desconectarse te desuscribe automáticamente):

    UNSUBSCRIBE mychannel
    

Nota: Al presionar Ctrl+C, en realidad ya te habías desconectado de todas las suscripciones. El comando UNSUBSCRIBE se muestra con fines demostrativos, pero en la práctica, desconectarse te desuscribe automáticamente de todos los canales.

La salida en la Terminal 1 se verá así:

1) "unsubscribe"
2) "mychannel"
3) (integer) 0

Analicemos la salida:

  • "unsubscribe": Indica que has cancelado tu suscripción a un canal.
  • "mychannel": Es el nombre del canal del cual te desuscribiste.
  • (integer) 0: Es la cantidad de canales a los que estás suscrito actualmente. Ahora es 0 porque te desuscribiste de mychannel.

Terminal 2: Probar la publicación después de cancelar la suscripción

Ahora cambia a la Terminal 2 y publica otro mensaje en mychannel:

PUBLISH mychannel "Is anyone still there?"

La salida en la Terminal 2 será:

(integer) 0

Esto indica que ningún cliente recibió el mensaje porque cancelaste tu suscripción al canal en la Terminal 1.

Verificar que no se reciben mensajes

Observa la Terminal 1; deberías notar que no aparece ningún mensaje nuevo debido a que ya no estás suscrito al canal.

Esto demuestra cómo cancelar la suscripción a un canal evita que recibas más mensajes publicados en él, mientras que el publicador aún puede enviar mensajes (aunque nadie los reciba).

Importante: Mantén ambas terminales y sus sesiones de redis-cli activas para el siguiente paso.

Suscripción por patrones con PSUBSCRIBE

En este paso, aprenderás a suscribirte a canales utilizando patrones mediante el comando PSUBSCRIBE en Redis. PSUBSCRIBE te permite suscribirte a múltiples canales que coincidan con un patrón especificado. Esto resulta muy útil cuando deseas recibir mensajes de un grupo de canales relacionados sin necesidad de suscribirte a cada uno de ellos de forma individual.

Terminal 1: Suscripción por patrón

Dado que cancelaste tu suscripción a mychannel en el paso anterior, la Terminal 1 debería mostrar ahora un indicador de Redis normal.

En la Terminal 1, suscríbete a los canales que coincidan con el patrón news.* utilizando el comando PSUBSCRIBE:

PSUBSCRIBE news.*

La salida será similar a esta:

Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1

Analicemos la salida:

  • "psubscribe": Indica que te has suscrito exitosamente a un patrón.
  • "news.*": Es el patrón al que te suscribiste. El comodín .* coincide con cualquier conjunto de caracteres.
  • (integer) 1: Es la cantidad de patrones a los que estás suscrito actualmente.

Terminal 2: Publicar en canales que coincidan con el patrón

Dirígete a la Terminal 2 y publica un mensaje en el canal news.sports usando el comando PUBLISH:

PUBLISH news.sports "Sports news update!"

La salida en la Terminal 2 indicará el número de suscriptores que recibieron el mensaje:

(integer) 1

Observar la coincidencia de patrones

Regresa a la Terminal 1 (donde te suscribiste al patrón). Deberías ver el mensaje que acabas de publicar:

1) "pmessage"
2) "news.*"
3) "news.sports"
4) "Sports news update!"

Esto muestra lo siguiente:

  • "pmessage": Indica que se trata de un mensaje coincidente por patrón.
  • "news.*": El patrón que coincidió.
  • "news.sports": El canal real en el que se publicó el mensaje.
  • "Sports news update!": El contenido del mensaje.

Probar múltiples canales

En la Terminal 2, intenta publicar en diferentes canales que coincidan con el patrón:

PUBLISH news.technology "New AI breakthrough!"
PUBLISH news.weather "Sunny skies ahead!"
PUBLISH sports.basketball "This won't match the pattern"

Observa en la Terminal 1 que solo se reciben los mensajes de los canales que coinciden con news.*, mientras que sports.basketball se ignora porque no coincide con dicho patrón.

Importante: Mantén ambas terminales y sus sesiones de redis-cli activas. La suscripción por patrones demuestra cómo puedes escuchar múltiples canales relacionados de manera simultánea.

Resumen

En este laboratorio, exploraste los fundamentos de la mensajería Pub/Sub de Redis. Aprendiste a suscribirte a canales utilizando el comando SUBSCRIBE, a publicar mensajes en canales con el comando PUBLISH, a cancelar suscripciones usando el comando UNSUBSCRIBE, y a suscribirte a canales mediante patrones con el comando PSUBSCRIBE. Estos comandos son esenciales para construir aplicaciones de mensajería en tiempo real con Redis.