Redis Pub/Sub

O Pub/Sub é um meio de coletar dados de qualquer número de publicadores de dados e permitir que um ou mais assinantes consumam o feed em tempo real, sem precisar se conectar diretamente aos publicadores. Esse padrão permite que os sistemas sejam dimensionados com mais facilidade e que editores e assinantes sejam adicionados ou removidos a qualquer momento.

Redis permite a criação de canais Pub/Sub para os quais os editores e assinantes fazem interface. As mensagens em um canal são enviadas no máximo uma vez para cada assinante, o que as torna ideais para ações de acionamento que não devem ser duplicadas, mas cuidado, pois uma vez entregue, a mensagem do canal não é mantida.

Casos de uso:

  • Mensagem em tempo real.
  • Bate-papo efêmero com vários usuários.
  • Transmissão de registros.

Assinatura de um canal

Um assinante simplesmente emite uma mensagem "SUBSCRIBE " para começar a se inscrever em um canal:

> SUBSCRIBE mychannel

Se um assinante precisar se inscrever em mais de um canal, isso também é possível:

> SUBSCRIBE mychannel1 mychannel2 mychannel3

A assinatura de um canal significa que o assinante receberá todas as mensagens que forem publicadas nesse canal após a assinatura. As mensagens mais antigas não são mantidas, portanto, o assinante deve estar conectado e inscrito para receber as mensagens à medida que elas ocorrem.

Se o canal não existir, o assinante não verá nenhum erro nem nenhuma mensagem.

Publicação em um canal

Um editor pode publicar em um canal com o comando ' PUBLISH <channel> <message>:

> PUBLISH mychannel "my first message"

e todos os assinantes receberão a mensagem da seguinte forma:

1) "message"
2) "mychannel"
3) "my first message"

A mensagem de assinatura inclui o nome do canal e a própria mensagem.

Um padrão comum é enviar objetos JSON como o texto da mensagem:

> PUBLISH mychannel '{"id":"1234","name":"db14","msg":"Out of Memory"}'

O valor de retorno de ' PUBLISH é um número inteiro que informa ao chamador quantos assinantes receberam a mensagem.

Assinatura seletiva

Em vez de assinar canais inteiros, é possível assinar canais curinga. Com a nomeação prudente dos canais, isso pode ser útil para ver, por exemplo, todos os logs de um aplicativo, apenas os logs de produção ou apenas os logs do banco de dados de produção.

> PSUBSCRIBE *
> PSUBSCRIBE prod_*
> PSUBSCRIBE prod_database_*
> PSUBSCRIBE prod_database_db57_activity_*

Cancelamento de inscrição

Um assinante pode cancelar a assinatura de todos os seus canais assinados com:

> UNSUBSCRIBE

Leitura adicional