Cliente Redis (go-redis) para Go: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a go-redis: potente cliente Redis para Go

\n\n

Redis es un almacén de datos de tipo "clave-valor" de alto rendimiento que funciona en memoria RAM. Se utiliza para almacenamiento en caché, gestión de sesiones, colas de mensajes, clasificaciones y mucho más. Para interactuar con Redis desde Go existen varias bibliotecas, y go-redis (paquete github.com/redis/go-redis/v9) es la más popular, activamente mantenida y funcional.

\n\n

Esta biblioteca proporciona una API Go limpia e idiomática para trabajar con todas las estructuras de datos de Redis (cadenas, listas, conjuntos, hashes, conjuntos ordenados, HyperLogLog, flujos, datos geoespaciales) y admite funciones avanzadas como agrupación en clústeres, Sentinel, Pub/Sub, canalización (pipelining) y scripts Lua. go-redis es totalmente compatible con Redis 7 y 8.

\n\n

En esta guía, analizaremos en detalle la instalación, los métodos principales, los errores típicos y escribiremos un ejemplo práctico real.

\n\n

Instalación de go-redis

\n\n

La instalación se realiza con el comando estándar go get:

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

Después de ejecutar este comando, la dependencia aparecerá en su go.mod. Asegúrese de tener instalado Go versión 1.18 o superior.

\n\n

También necesitará un servidor Redis en funcionamiento (local o remoto). Para pruebas, puede iniciar Redis en Docker:

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

Inicio rápido: conectarse y hacer la primera solicitud

\n\n

Cree un archivo main.go y escriba un programa simple que se conecte a Redis, escriba y lea un valor.

\n\n
package main\n\nimport (\n    "context"\n    "fmt"\n    "github.com/redis/go-redis/v9"\n)\n\nfunc main() {\n    // Creamos un contexto (se recomienda usar context.Background())\n    ctx := context.Background()\n\n    // Creamos un cliente\n    rdb := redis.NewClient(&redis.Options{\n        Addr:     "localhost:6379", // dirección del servidor Redis\n        Password: "",               // contraseña (si la hay)\n        DB:       0,                // número de base de datos (por defecto 0)\n    })\n\n    // Verificamos la conexión con Ping\n    pong, err := rdb.Ping(ctx).Result()\n    if err != nil {\n        panic(fmt.Sprintf("No se pudo conectar a Redis: %v", err))\n    }\n    fmt.Println("Conectado:", pong)\n\n    // Establecemos la clave "name" con el valor "Alice"\n    err = rdb.Set(ctx, "name", "Alice", 0).Err()\n    if err != nil {\n        panic(err)\n    }\n\n    // Leemos el valor de la clave "name"\n    val, err := rdb.Get(ctx, "name").Result()\n    if err != nil {\n        panic(err)\n    }\n    fmt.Println("name:", val)\n\n    // Cerramos la conexión al finalizar el programa\n    defer rdb.Close()\n}
\n\n

Ejecute el programa:

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

Debería ver:

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

Métodos principales de go-redis (8 o más)

\n\n

Todos los métodos de go-redis devuelven un objeto *Cmd (o su especialización), que tiene el método .Result() para obtener el resultado y el error, .Val() para obtener solo el valor y .Err() para obtener solo el error. Esto permite manejar los resultados de forma flexible.

\n\n

1. Set — establecer el valor de una clave

\n

Qué hace: Establece un valor para la clave especificada. Se puede definir un tiempo de vida (TTL) o 0 para almacenamiento indefinido.

\n

Parámetros:

\n
    \n
  • ctx context.Context — contexto para controlar el tiempo de ejecución
  • \n
  • key string — nombre de la clave
  • \n
  • value interface{} — valor (se serializará)
  • \n
  • expiration time.Duration — tiempo de vida (0 — sin TTL)
  • \n
\n

Ejemplo:

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

Recommendations