Sistema de Cache

Cache multi-backend com suporte a memória, SQLite (arquivo) e Redis.

Configuração

# Backend: memory (padrão), file, redis
CACHE_BACKEND=memory

# Para SQLite
CACHE_DB=cache.db

# Para Redis
CACHE_REDIS_URL=redis://localhost:6379/0

CACHE_PREFIX=velox
CACHE_DEFAULT_TIMEOUT=300

Uso Básico

from velox.cache import cache

# Definir valor
cache.set('user:1', {'name': 'João', 'email': 'joao@email.com'}, timeout=300)

# Obter valor
user = cache.get('user:1')

# Verificar existência
if cache.has('user:1'):
    print('Usuário está em cache')

# Deletar
cache.delete('user:1')

# Limpar tudo
cache.clear()

Decorador cache_on

Cacheia resultado de funções:

from velox.cache import cache_on

@cache_on(lambda user_id: f'user:{user_id}', timeout=60)
def get_user(user_id):
    # Simula busca no banco
    return db.query(f'SELECT * FROM users WHERE id = {user_id}')

# Primeira chamada: executa função
user = get_user(1)

# Segunda chamada: retorna do cache
user = get_user(1)

Operações em Massa

# Obter múltiplas chaves
dados = cache.get_many(['user:1', 'user:2', 'user:3'])

# Definir múltiplas chaves
cache.set_many({
    'config:site': 'Meu Site',
    'config:theme': 'dark',
}, timeout=3600)

# Deletar múltiplas chaves
cache.delete_many(['user:1', 'user:2', 'user:3'])

Estatísticas

stats = cache.stats
print(f"Hits: {stats['hits']}")
print(f"Misses: {stats['misses']}")
print(f"Hit rate: {stats['hit_rate']}%")
print(f"Chaves: {stats['keys']}")

Backends

Memory (desenvolvimento)

Padrão, rápido, não persiste entre reinicializações.

CACHE_BACKEND=memory

FileCache (produção simples)

Persiste em SQLite, sobrevive a reinicializações.

CACHE_BACKEND=file
CACHE_DB=cache.db

RedisCache (alta performance)

Recomendado para produção com múltiplos workers.

CACHE_BACKEND=redis
CACHE_REDIS_URL=redis://localhost:6379/0

Requer: pip install redis

Template Cache

from velox.cache import template_cache

# Habilitar cache de templates
TEMPLATE_CACHE=true

# Obter template compilado
compiled = template_cache.get('index.html')

# Limpar cache de templates
template_cache.clear()