DEV Community

Cover image for Python e Redis: Utilizando Pub/Sub
.·. Felipe Paz .·.
.·. Felipe Paz .·.

Posted on

Python e Redis: Utilizando Pub/Sub

Acredito que você já tenha ouvido falar sobre o conceito de publisher/subscriber, certo? E você sabia que o Redis possui essa comunicação nativamente?

De maneira muito sucinta, vou mostar um exemplo prático e simples utilizando Redis e Python usando a comunicação publish/subscriber.

O que preciso?

Para esse exemplo são necessárias três ferramentas instaladas na sua máquina:

  • Python 3.8 ou superior
  • pip
  • Redis

Os detalhes de instalação vou pular porque esse exemplo pode ser feito em qualquer SO. Basta seguir a documentação de instalação de cada item.

Por fim, uma vez instalado o pip, vamos instalar o redis (ah, para quem não sabe, o pip seria o npm do python) com o comando abaixo:

pip3 install redis
Enter fullscreen mode Exit fullscreen mode

O Script

Crie um arquivo chamado app.py e cole esse script:

from redis import StrictRedis
from time import strftime, sleep

client = StrictRedis(host="localhost", port=6379)

subscriber = client.pubsub()
subscriber.psubscribe('channel_test')

while True:
    messages = subscriber.get_message()
    now = strftime('%d/%m/%Y:%H:%M:%S')

    if messages:
        print(f'{now} - {messages["data"]}')
    else:
        print(f'{now} - Nothing here!!!')
    sleep(1)
Enter fullscreen mode Exit fullscreen mode

Explicando cada linha

Importação do redis para o projeto (obviously) , importação de formatação de data da classe time e também o sleep, que vai fazer com que nosso while sofra uma pausa de 1 segundo em cada iteração.

from redis import StrictRedis
from time import strftime, sleep
Enter fullscreen mode Exit fullscreen mode

Conexão com o redis

client = StrictRedis(host="localhost", port=6379)
Enter fullscreen mode Exit fullscreen mode

Especificando que vamos nos subscrever num canal chamado channel_test

subscriber = client.pubsub()
subscriber.psubscribe('channel_test')
Enter fullscreen mode Exit fullscreen mode

Bloco while que vai ficar rodano sem parar o processo de subscribe. Uma vez que seja publicada alguma mensagem no canal channel_test, vai ser printado no console.

while True:
    messages = subscriber.get_message()
    now = strftime('%d/%m/%Y:%H:%M:%S')

    if messages:
        print(f'{now} - {messages["data"]}')
    else:
        print(f'{now} - Nothing here!!!')
    sleep(1)
Enter fullscreen mode Exit fullscreen mode

Publicando no canal

Redis instalado? Tá na hora de usar esse carinha.
No terminal/prompt, rode o comando:

redis-cli
Enter fullscreen mode Exit fullscreen mode

Se tudo tiver ocorrido bem na instalação e o redis estiver rodando, você deve estar com o shell do redis habilitado.

Para publicar, basta digitar:

publish channel_test "um conteúdo qualquer aqui"
Enter fullscreen mode Exit fullscreen mode

Ah, a gente ainda não executou nosso script python. Pelo terminal, acesse o diretório de onde está nosso app.py e execute com o comando:

python app.py
Enter fullscreen mode Exit fullscreen mode

Resultado

Script rodando? Redis rodando? Publish realizado?
Pah, a mágica acontece ...

Image description

Agora exercite sua criatividade e implemente outras coisas bacanas usando redis como publisher/subscriber e seja feliz =D =D =D

Top comments (2)

Collapse
 
rafscunha profile image
Rafael Silva Cunha

Muito bacana, mas se eu quiser que um script em python faça uma publish, é possivel?

Collapse
 
felipepaz profile image
.·. Felipe Paz .·.

Claro que sim, vou atualizar esse exemplo e fazer uma aplicação python realizar o publish e a outra ser o subscriber!!