Introdução ao go-redis: um poderoso cliente Redis para Go
\n\nRedis é 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.
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\nNeste guia, abordaremos detalhadamente a instalação, os principais métodos, erros comuns e criaremos um exemplo prático real.
\n\nInstalação do go-redis
\n\nA instalação é feita com o comando padrão go get:
go get github.com/redis/go-redis/v9\n\nApó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.
Você também precisará de um servidor Redis em execução (local ou remoto). Para testes, você pode iniciar o Redis no Docker:
\n\ndocker run --name my-redis -p 6379:6379 -d redis\n\nInício rápido: conectando e fazendo a primeira requisição
\n\nCrie um arquivo main.go e escreva um programa simples que se conecta ao Redis, grava e lê um valor.
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\nExecute o programa:
\n\ngo run main.go\n\nVocê deve ver:
\n\nConectado: PONG\nname: Alice\n\nPrincipais métodos do go-redis (8+)
\n\nTodos 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.
1. Set — definir o valor de uma chave
\nO que faz: Define o valor para a chave especificada. É possível definir um tempo de vida (TTL) ou 0 para armazenamento indefinido.
\nParâ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
Exemplo:
\nerr := rdb.Set(ctx, " Também na biblioteca
Trabalho com datas em Rust: visão geral das bibliotecas para tempo e calendário
CoreML para Swift: guia completo com exemplos práticos
TypeStack/class-validator para TypeScript: guia completo com exemplos
ModelMapper para Java: guia completo com exemplos práticos
Guia completo do Drizzle ORM para TypeScript com exemplos