Cliente Redis (go-redis) para Go: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao go-redis: um poderoso cliente Redis para Go

\n\n

Redis é um armazenamento de dados do tipo "chave-valor" de alto desempenho, que opera em memória RAM. Ele é usado para cache, gerenciamento de sessões, filas de mensagens, rankings e muito mais. Para interagir com Redis a partir do Go, existem várias bibliotecas, e o go-redis (pacote github.com/redis/go-redis/v9) é a mais popular, ativamente mantida e funcional.

\n\n

Esta biblioteca fornece uma API Go limpa e idiomática para trabalhar com todas as estruturas de dados do Redis (strings, listas, conjuntos, hashes, conjuntos ordenados, HyperLogLog, streams, dados geoespaciais) e suporta recursos avançados como clusterização, Sentinel, Pub/Sub, pipelining e scripts Lua. O go-redis é totalmente compatível com Redis 7 e 8.

\n\n

Neste guia, abordaremos detalhadamente a instalação, os principais métodos, erros comuns e criaremos um exemplo prático real.

\n\n

Instalação do go-redis

\n\n

A instalação é feita com o comando padrão go get:

\n\n
go get github.com/redis/go-redis/v9
\n\n

Após executar este comando, a dependência aparecerá no seu go.mod. Certifique-se de ter o Go versão 1.18 ou superior instalado.

\n\n

Você também precisará de um servidor Redis em execução (local ou remoto). Para testes, você pode iniciar o Redis no Docker:

\n\n
docker run --name my-redis -p 6379:6379 -d redis
\n\n

Início rápido: conectando e fazendo a primeira requisição

\n\n

Crie um arquivo main.go e escreva um programa simples que se conecta ao Redis, grava e lê um valor.

\n\n
package main\n\nimport (\n    "context"\n    "fmt"\n    "github.com/redis/go-redis/v9"\n)\n\nfunc main() {\n    // Cria um contexto (recomenda-se usar context.Background())\n    ctx := context.Background()\n\n    // Cria um cliente\n    rdb := redis.NewClient(&redis.Options{\n        Addr:     "localhost:6379", // endereço do servidor Redis\n        Password: "",               // senha (se houver)\n        DB:       0,                // número do banco de dados (padrão 0)\n    })\n\n    // Verifica a conexão com Ping\n    pong, err := rdb.Ping(ctx).Result()\n    if err != nil {\n        panic(fmt.Sprintf("Falha ao conectar ao Redis: %v", err))\n    }\n    fmt.Println("Conectado:", pong)\n\n    // Define a chave "name" com o valor "Alice"\n    err = rdb.Set(ctx, "name", "Alice", 0).Err()\n    if err != nil {\n        panic(err)\n    }\n\n    // Lê o valor da chave "name"\n    val, err := rdb.Get(ctx, "name").Result()\n    if err != nil {\n        panic(err)\n    }\n    fmt.Println("name:", val)\n\n    // Fecha a conexão ao final do programa\n    defer rdb.Close()\n}
\n\n

Execute o programa:

\n\n
go run main.go
\n\n

Você deve ver:

\n\n
Conectado: PONG\nname: Alice
\n\n

Principais métodos do go-redis (8+)

\n\n

Todos os métodos do go-redis retornam um objeto *Cmd (ou sua especialização), que possui o método .Result() para obter o resultado e o erro, .Val() para obter apenas o valor e .Err() para obter apenas o erro. Isso permite tratar os resultados de forma flexível.

\n\n

1. Set — definir o valor de uma chave

\n

O que faz: Define o valor para a chave especificada. É possível definir um tempo de vida (TTL) ou 0 para armazenamento indefinido.

\n

Parâmetros:

\n
    \n
  • ctx context.Context — contexto para gerenciar o tempo de execução
  • \n
  • key string — nome da chave
  • \n
  • value interface{} — valor (será serializado)
  • \n
  • expiration time.Duration — tempo de vida (0 — sem TTL)
  • \n
\n

Exemplo:

\n
err := rdb.Set(ctx, "                    

Recommendations