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
    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)
    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
    Conexão com o redis
    client = StrictRedis(host="localhost", port=6379)
    Especificando que vamos nos subscrever num canal chamado channel_test
    subscriber = client.pubsub()
    subscriber.psubscribe('channel_test')
    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)
    Publicando no canal
    Redis instalado? Tá na hora de usar esse carinha.
    No terminal/prompt, rode o comando:
    redis-cli
    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"
    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
    Resultado
    Script rodando? Redis rodando? Publish realizado?
    Pah, a mágica acontece ...
    Agora exercite sua criatividade e implemente outras coisas bacanas usando redis como publisher/subscriber e seja feliz =D =D =D

    34

    This website collects cookies to deliver better user experience

    Python e Redis: Utilizando Pub/Sub