Mensajería Pub/Sub de Redis

RedisBeginner
Practicar Ahora

Introducción

En este laboratorio explorarás el sistema de mensajería Pub/Sub de Redis. Aprenderás a suscribirte a canales, publicar mensajes y cancelar suscripciones. A lo largo del laboratorio practicarás las operaciones fundamentales mediante los comandos SUBSCRIBE, PUBLISH, UNSUBSCRIBE y PSUBSCRIBE.

Suscribirse a un canal con SUBSCRIBE

En este paso aprenderás a suscribirte a un canal de Redis mediante el comando SUBSCRIBE. Al suscribirte a un canal, podrás recibir los mensajes publicados en él. Este es uno de los conceptos fundamentales del sistema de mensajería Pub/Sub de Redis.

Terminal 1: suscribirse a un canal

Abre el primer terminal (lo llamaremos Terminal 1). Puedes utilizar el terminal de Xfce disponible en el entorno de LabEx.

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

redis-cli

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

Suscríbete a un canal llamado mychannel mediante 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

Veamos qué significa cada línea:

  • "subscribe": indica que te has suscrito correctamente a un canal.
  • "mychannel": es el nombre del canal al que te has suscrito.
  • (integer) 1: es el número de canales a los que estás suscrito actualmente.

Importante: Mantén abierto el Terminal 1, con la sesión de redis-cli activa y suscrita al canal. NO cierres este terminal ni pulses Ctrl+C, ya que eso cancelaría tu suscripción. En el siguiente paso utilizaremos un segundo terminal para publicar mensajes.

Publicar mensajes con PUBLISH

En este paso aprenderás a publicar mensajes en un canal de Redis mediante el comando PUBLISH. Publicar mensajes es la función central del sistema Pub/Sub, ya que permite enviar datos a todos los suscriptores de un canal determinado.

Terminal 2: publicar mensajes

Abre un segundo terminal (lo llamaremos Terminal 2). Puedes abrir una pestaña nueva en el terminal de Xfce.

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

redis-cli

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

Ahora publica un mensaje en el canal mychannel mediante el comando PUBLISH:

PUBLISH mychannel "Hello, Redis!"

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

(integer) 1

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

Ver el mensaje en el Terminal 1

Vuelve al Terminal 1, donde te suscribiste a mychannel en el paso anterior. Deberías ver en tiempo real el mensaje que acabas de publicar:

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

Esto indica lo siguiente:

  • "message": señala que se trata de un mensaje publicado.
  • "mychannel": es el canal en el que se publicó el mensaje.
  • "Hello, Redis!": es el contenido del mensaje.

Probar la mensajería en tiempo real

Ahora puedes experimentar con la mensajería en tiempo real. Vuelve al Terminal 2 y publica más mensajes; después cambia al Terminal 1 para ver cómo aparecen al instante. Prueba con mensajes diferentes y observa la comunicación en directo.

Por ejemplo, en el Terminal 2:

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

Importante: Mantén activos los dos terminales y sus respectivas sesiones de redis-cli. En los siguientes pasos seguiremos utilizando ambos.

Cancelar una suscripción con UNSUBSCRIBE

En este paso aprenderás a cancelar la suscripción a un canal de Redis mediante el comando UNSUBSCRIBE. Al cancelar la suscripción, el cliente se elimina de la lista de suscriptores de ese canal y deja de recibir los mensajes que se publiquen en él.

Terminal 1: salir del modo de suscripción

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

Como el Terminal 1 está en modo de suscripción, no puedes ejecutar directamente comandos normales de Redis. Pulsa Ctrl+C para salir de este modo y volver al indicador del terminal. Después, vuelve a conectarte a Redis:

redis-cli

Ahora ejecuta el comando UNSUBSCRIBE. Aunque la desconexión ya eliminó la suscripción, este comando sirve para mostrar la respuesta de Redis al cancelar una suscripción:

UNSUBSCRIBE mychannel

Nota: al pulsar Ctrl+C, ya te habías desconectado de todas las suscripciones. El comando UNSUBSCRIBE se muestra con fines ilustrativos; en la práctica, al desconectarte cancelas automáticamente todas tus suscripciones a los canales.

La salida del Terminal 1 será similar a esta:

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

Veamos qué significa cada línea:

  • "unsubscribe": indica que has cancelado la suscripción a un canal.
  • "mychannel": es el nombre del canal cuya suscripción cancelaste.
  • (integer) 0: es el número de canales a los que estás suscrito actualmente. Ahora es 0 porque cancelaste la suscripción a mychannel.

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

Ahora cambia al Terminal 2 y publica otro mensaje en mychannel:

PUBLISH mychannel "Is anyone still there?"

La salida del Terminal 2 será:

(integer) 0

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

Comprobar que no se recibe ningún mensaje

Mira el Terminal 1: no debería aparecer ningún mensaje nuevo, ya que cancelaste la suscripción al canal.

Esto demuestra que cancelar la suscripción a un canal impide recibir los mensajes que se publiquen posteriormente en él. El publicador aún puede enviar mensajes, pero nadie los recibirá.

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

Suscribirse a patrones con PSUBSCRIBE

En este paso aprenderás a suscribirte a canales mediante patrones utilizando el comando PSUBSCRIBE de Redis. PSUBSCRIBE permite suscribirte a varios canales que coincidan con un patrón determinado. Resulta útil cuando quieres recibir mensajes de un grupo de canales relacionados sin tener que suscribirte a cada uno por separado.

Terminal 1: suscripción mediante patrones

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

En el Terminal 1, suscríbete a los canales que coincidan con el patrón news.* mediante 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

Veamos qué significa cada línea:

  • "psubscribe": indica que te has suscrito correctamente a un patrón.
  • "news.*": es el patrón al que te has suscrito. .* es un comodín que coincide con cualquier conjunto de caracteres.
  • (integer) 1: es el número de patrones a los que estás suscrito actualmente.

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

Ve al Terminal 2 y publica un mensaje en el canal news.sports mediante el comando PUBLISH:

PUBLISH news.sports "Sports news update!"

La salida del Terminal 2 mostrará el número de suscriptores que recibieron el mensaje:

(integer) 1

Observar la coincidencia del patrón

Vuelve al 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 indica lo siguiente:

  • "pmessage": señala que se trata de un mensaje que coincide con un patrón.
  • "news.*": es el patrón que coincidió.
  • "news.sports": es el canal concreto en el que se publicó el mensaje.
  • "Sports news update!": es el contenido del mensaje.

Probar varios canales

En el Terminal 2, prueba a publicar mensajes en distintos 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 el Terminal 1 que solo se reciben los mensajes de los canales news.*. El mensaje de sports.basketball no se recibe porque no coincide con el patrón news.*.

Importante: Mantén abiertos ambos terminales y sus sesiones de redis-cli. La suscripción mediante patrones muestra cómo escuchar simultáneamente varios canales relacionados.

Resumen

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