Programador Leigo
Redis 10 min leitura 20 JAN 2026

Redis na prática: cache, sessões e filas

Use Redis para tornar sua aplicação Python mais rápida e escalável.


O que é Redis?

Redis é um banco de dados em memória que armazena dados no formato chave-valor. Ele é extremamente rápido porque trabalha diretamente na RAM, sem precisar acessar o disco para cada operação. Redis é usado por empresas como Twitter, GitHub e Stack Overflow para cache, gerenciamento de sessões e filas de mensagens.

Para instalar a biblioteca Python:

pip install redis

E para conectar:

import redis

r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True)

# Testando a conexao
r.ping()  # True

Cache: a principal utilidade

O caso de uso mais comum do Redis é cache. Em vez de buscar dados no banco de dados relacional a cada requisição, você armazena o resultado no Redis e serve de lá:

import json

def buscar_produto(produto_id):
    chave = f"produto:{produto_id}"

    # Tenta buscar no cache
    cache = r.get(chave)
    if cache:
        print("Dados vindos do cache")
        return json.loads(cache)

    # Se nao estiver no cache, busca no banco
    produto = banco_de_dados.buscar(produto_id)

    # Armazena no cache por 5 minutos (300 segundos)
    r.setex(chave, 300, json.dumps(produto))
    print("Dados vindos do banco")
    return produto

O método setex define um tempo de expiração automático. Depois de 300 segundos, o Redis remove a chave sozinho.

Sessões de usuário

Em aplicações web, as sessões armazenam dados temporários do usuário (como o carrinho de compras). Usar Redis para sessões é mais rápido e escalável do que armazenar em arquivos no servidor:

import uuid

def criar_sessao(usuario_id, dados):
    sessao_id = str(uuid.uuid4())
    chave = f"sessao:{sessao_id}"

    r.hset(chave, mapping={
        "usuario_id": usuario_id,
        "nome": dados["nome"],
        "email": dados["email"],
    })
    # Sessao expira em 30 minutos
    r.expire(chave, 1800)
    return sessao_id

def buscar_sessao(sessao_id):
    chave = f"sessao:{sessao_id}"
    dados = r.hgetall(chave)
    if not dados:
        return None
    # Renova a expiracao a cada acesso
    r.expire(chave, 1800)
    return dados

# Uso
sid = criar_sessao("42", {"nome": "Maria", "email": "maria@email.com"})
dados = buscar_sessao(sid)
print(dados)  # {'usuario_id': '42', 'nome': 'Maria', 'email': 'maria@email.com'}

O hash do Redis (hset/hgetall) é ideal para sessões porque permite armazenar múltiplos campos em uma única chave.

Filas de tarefas

Redis funciona como uma fila simples e eficiente. Isso é útil para processar tarefas em segundo plano, como enviar e-mails ou gerar relatórios:

import json
import time

# Produtor: adiciona tarefas na fila
def enfileirar_tarefa(tipo, dados):
    tarefa = json.dumps({"tipo": tipo, "dados": dados})
    r.lpush("fila:tarefas", tarefa)
    print(f"Tarefa enfileirada: {tipo}")

# Consumidor: processa tarefas da fila
def processar_fila():
    print("Aguardando tarefas...")
    while True:
        resultado = r.brpop("fila:tarefas", timeout=5)
        if resultado is None:
            continue

        _, tarefa_json = resultado
        tarefa = json.loads(tarefa_json)
        print(f"Processando: {tarefa['tipo']}")

        if tarefa["tipo"] == "enviar_email":
            enviar_email(tarefa["dados"])
        elif tarefa["tipo"] == "gerar_relatorio":
            gerar_relatorio(tarefa["dados"])

# Exemplo de uso
enfileirar_tarefa("enviar_email", {"para": "ana@email.com", "assunto": "Bem-vinda!"})
enfileirar_tarefa("gerar_relatorio", {"mes": "janeiro", "ano": 2026})

O comando brpop é bloqueante: ele espera até que uma nova tarefa apareça na fila, sem consumir CPU em um loop vazio.

Monitorando o Redis

Para verificar o que está armazenado no Redis, use os comandos de inspeção:

# Listar todas as chaves que comecam com "produto:"
chaves = r.keys("produto:*")
print(chaves)

# Verificar o tempo restante de uma chave
ttl = r.ttl("produto:1")
print(f"Expira em {ttl} segundos")

# Ver o uso de memoria
info = r.info("memory")
print(f"Memoria usada: {info['used_memory_human']}")

Conclusão

Redis é uma ferramenta versátil que resolve três problemas comuns em aplicações Python: cache para reduzir carga no banco de dados, sessões para escalar aplicações web e filas para processar tarefas em segundo plano. A biblioteca redis-py torna a integração com Python simples e direta. Comece usando Redis para cache e, conforme sua aplicação crescer, explore sessões e filas.

Continue lendo

Compartilhar