📊 Capítulo 15: Caching Distribuído com Redis
Especialização Backend com Python & FastAPI
🗺️ Acelerando Endpoints com Caching em Memória
sequenceDiagram
autonumber
actor C as Cliente HTTP
participant API as FastAPI (@cache)
participant R as Redis Server (In-Memory)
participant DB as PostgreSQL (Disk / SSD)
C->>API: GET /api/v1/produtos/destaques
API->>R: GET "fastapi-cache:produtos:destaques"
alt Cache Hit (Chave encontrada)
R-->>API: Retorna JSON (Latência < 1 ms ⚡)
API-->>C: HTTP 200 OK
else Cache Miss (Primeiro acesso ou expirado)
R-->>API: None
API->>DB: Executa query SQL complexa (120 ms)
DB-->>API: Retorna dados brutos
API->>R: SETEX "fastapi-cache:produtos:destaques" TTL=300
API-->>C: HTTP 200 OK
end
🎯 Slide 1: Integração com fastapi-cache2 & redis-py
from fastapi_cache import FastAPICache
from fastapi_cache.backends.redis import RedisBackend
from fastapi_cache.decorator import cache
from redis import asyncio as aioredis
@asynccontextmanager
async def lifespan(app: FastAPI):
redis = aioredis.from_url("redis://localhost:6379", encoding="utf8", decode_responses=True)
FastAPICache.init(RedisBackend(redis), prefix="fastapi-cache")
yield
await redis.close()
🎯 Slide 2: Decorator @cache(expire=300) em Endpoints
@router.get("/destaques", response_model=List[ProdutoRead])
@cache(expire=60) # Cache de 60 segundos com serialização automática!
async def listar_destaques(session: DatabaseSession):
produtos = await service.buscar_mais_vendidos(session)
return produtos
🎯 Slide 3: Invalidação Estratégica de Cache
-
Evicção Direta: Ao criar, alterar ou deletar um produto, remova a chave de cache correspondente para evitar leitura de dados obsoletos.
- Prefixos por Domínio: Permitem invalidar categorias inteiras de produtos com comandos de pattern match (
DEL fastapi-cache:produtos:*).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim