sql >> Base de Datos >  >> NoSQL >> Redis

¿Cuáles son las principales diferencias entre Redis Pub/Sub y Redis Stream?

Almacenamiento de datos

Pub/Sub es una plataforma de publicador/suscriptor, no es almacenamiento de datos. Los mensajes publicados se evaporan, independientemente de que hubiera algún suscriptor.

En Redis Streams, stream es un tipo de datos, una estructura de datos por derecho propio. Los mensajes o entradas se almacenan en la memoria y permanecen allí hasta que se ordene que se eliminen.

Comunicación sincronizada/asincrónica (push/pull)

Pub/Sub es comunicación sincrónica (push protocolo). Todas las partes deben estar activas al mismo tiempo para poder comunicarse. Aquí Redis es un corredor de mensajería síncrona pura.

Redis Streams permite ambos sincrónicos (XREAD con BLOCK y el $ especial ID es un empuje protocolo) y comunicación asíncrona (regular XREAD es un tirón protocolo). XREAD con BLOCK es como Pub/Sub, pero con la capacidad de reanudar la desconexión sin perder mensajes.

Semántica de entrega

Pub/Sub es como máximo una vez, es decir, "dispara y olvida".

Redis Streams permite como máximo una vez o como mínimo una vez (reconocimiento explícito enviado por el receptor)

Modo de bloqueo para consumidores

Pub/Sub solo está en modo de bloqueo. Una vez suscrito a un canal, el cliente se pone en modo de suscriptor y no puede emitir comandos (excepto [P]SUBSCRIBE , [P]UNSUBSCRIBE , PING y QUIT ), se ha vuelto de solo lectura.

Redis Streams permite a los consumidores leer mensajes en modo de bloqueo o no.

Fan-out

Pub/Sub es solo fan-out. Todos los clientes activos reciben todos los mensajes.

Redis Streams permite la distribución (con XREAD ), sino también para proporcionar un subconjunto diferente de mensajes del mismo flujo a muchos clientes. Esto permite escalar el procesamiento de mensajes, enrutando diferentes mensajes a diferentes trabajadores, de manera que no sea posible que el mismo mensaje se entregue a múltiples consumidores. Este último escenario se logra con grupos de consumidores .

Redis Streams proporciona muchas más funciones, como marcas de tiempo, pares de valores de campo, rangos, etc. No significa que siempre deba optar por Streams. Si su caso de uso se puede lograr con Pub/Sub, entonces es mejor que use Pub/Sub. Con Streams, debe cuidar el uso de la memoria.