DEV Community

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

Posted on

9 1

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

Image of Datadog

Create and maintain end-to-end frontend tests

Learn best practices on creating frontend tests, testing on-premise apps, integrating tests into your CI/CD pipeline, and using Datadog’s testing tunnel.

Download The Guide

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!!

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More