📊 Capítulo 13: Caching com Redis em Go
Especialização Backend com Go & Gin Gonic
🗺️ O Fluxo de Caching com redis/go-redis/v9
sequenceDiagram
autonumber
actor C as Cliente HTTP
participant H as ProdutoHandler
participant R as Redis Server (go-redis client)
participant DB as PostgreSQL (GORM)
C->>H: GET /api/v1/produtos/10
H->>R: rdb.Get(ctx, "produto:10")
alt Cache Hit (Chave encontrada)
R-->>H: Retorna JSON serializado (0.8 ms ⚡)
H-->>C: HTTP 200 OK
else Cache Miss (Chave não existe)
R-->>H: redis.Nil
H->>DB: db.First(&produto, 10) (45 ms)
DB-->>H: Retorna Struct
H->>R: rdb.Set(ctx, "produto:10", jsonBytes, 10*time.Minute)
H-->>C: HTTP 200 OK
end
🎯 Slide 1: Conexão e Inicialização do Cliente Redis
import "github.com/redis/go-redis/v9"
func NovoRedisClient(addr, pass string) *redis.Client {
return redis.NewClient(&redis.Options{
Addr: addr,
Password: pass,
DB: 0,
PoolSize: 50,
})
}
🎯 Slide 2: Tratamento Idiomático de Cache Miss
val, err := rdb.Get(ctx, "chave").Result()
if err == redis.Nil {
// Chave não existe: busca no banco de dados!
} else if err != nil {
// Erro de rede ou indisponibilidade do Redis: fallback gracioso!
}
🎯 Slide 3: Invalidação Atômica com TTL e Pipelines
-
TTL Automático: Garante expiração de chaves obsoletas.
- Redis Pipelines (
rdb.Pipeline()): Agrupa dezenas de comandos de leitura/escrita em uma única viagem TCP (Round-Trip) para ganho colossal de throughput!
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim