Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Quais são as principais diferenças entre o Redis Pub/Sub e o Redis Stream?

Armazenamento de dados


Pub/Sub é uma plataforma de editor/assinante, não é armazenamento de dados. As mensagens publicadas evaporam, independentemente de haver algum assinante.

No Redis Streams, stream é um tipo de dados, uma estrutura de dados por si só. As mensagens ou entradas são armazenadas na memória e permanecem lá até serem comandadas para serem excluídas.

Comunicação de sincronização/assíncrona (Push/Pull)


Pub/Sub é comunicação síncrona (push protocolo). Todas as partes precisam estar ativas ao mesmo tempo para poder se comunicar. Aqui o Redis é um corretor de mensagens síncrono puro.

Os Redis Streams permitem tanto sincronismos (XREAD com BLOCK e o especial $ ID é um push protocolo) e comunicação assíncrona (regular XREAD é uma puxada protocolo). XREAD com BLOCK é como o Pub/Sub, mas com a capacidade de retomar na desconexão sem perder mensagens.

Semântica de entrega


Pub/Sub é no máximo uma vez, ou seja, "dispare e esqueça".

Redis Streams permite no máximo uma vez ou no mínimo uma vez (reconhecimento explícito enviado pelo receptor)

Modo de bloqueio para consumidores


O Pub/Sub é apenas em modo de bloqueio. Uma vez inscrito em um canal, o cliente é colocado no modo de assinante e não pode emitir comandos (exceto para [P]SUBSCRIBE , [P]UNSUBSCRIBE , PING e QUIT ), tornou-se somente leitura.

O Redis Streams permite que os consumidores leiam mensagens no modo de bloqueio ou não.

Divulgação


Pub/Sub é apenas fan-out. Todos os clientes ativos recebem todas as mensagens.

Redis Streams permite distribuição (com XREAD ), mas também para fornecer um subconjunto diferente de mensagens do mesmo fluxo para muitos clientes. Isso permite dimensionar o processamento de mensagens, roteando diferentes mensagens para diferentes trabalhadores, de forma que não seja possível que a mesma mensagem seja entregue a vários consumidores. Este último cenário é alcançado com grupos de consumidores .

O Redis Streams fornece muitos outros recursos, como carimbos de data/hora, pares de valor de campo, intervalos etc. Isso não significa que você deve sempre optar por Streams. Se o seu caso de uso puder ser alcançado com o Pub/Sub, é melhor você usar o Pub/Sub. Com o Streams, você precisa cuidar do uso da memória.