Cliente Redis para Go (Golang) — go-redis y radix

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

Cliente Redis para Go (Golang): go-redis y radix



Redis es una de las bases de datos in-memory más populares, utilizada para almacenamiento en caché, colas, sesiones y análisis en tiempo real. En el ecosistema Go (Golang) existen varios clientes maduros para trabajar con Redis. En este artículo analizaremos en detalle las dos bibliotecas principales: go-redis (el cliente más popular) y radix (más eficiente y de bajo nivel). Aprenderá cómo instalarlos, conectarse, realizar operaciones básicas, usar pipelines, Pub/Sub y trabajar con clústeres.



1. Por qué Redis es importante para el desarrollador Go

Go se elige a menudo para crear aplicaciones de servidor de alta carga, microservicios y manejadores de eventos. Redis complementa perfectamente a Go gracias a:

  • Velocidad: las operaciones se ejecutan en microsegundos.
  • Simplicidad: API minimalista, estructuras de datos integradas (cadenas, listas, conjuntos, hashes).
  • Soporte para Pub/Sub, transacciones y scripts Lua.

La elección correcta del cliente determina el rendimiento y la facilidad de desarrollo.



2. go-redis — el estándar de facto

go-redis (repositorio github.com/redis/go-redis/v9) es el cliente Redis más popular para Go. Proporciona una API de alto nivel, soporte para clústeres, centinelas, pipelines, Pub/Sub y bloqueos distribuidos.



2.1 Instalación

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


2.2 Conexión a Redis

package main

import ( "context" "fmt" "github.com/redis/go-redis/v9")

func main() { ctx := context.Background()

rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // sin contraseña DB: 0, // base de datos por defecto })

// Verificar conexión pong, err := rdb.Ping(ctx).Result() if err != nil { panic(err) } fmt.Println(pong) // PONG}


2.3 Operaciones básicas

// Establecer una cadenaerr := rdb.Set(ctx, "key", "value", 0).Err()if err != nil {    panic(err)}

// Obtener una cadenaval, err := rdb.Get(ctx, "key").Result()if err != nil { panic(err)}fmt.Println("key:", val)

// Trabajar con hashesrdb.HSet(ctx, "user:1", "name", "Alice", "age", 30)name, _ := rdb.HGet(ctx, "user:1", "name").Result()fmt.Println("Nombre:", name)

// Eliminar una claverdb.Del(ctx, "key")


2.4 Pipelines

Los pipelines permiten enviar múltiples comandos en una sola llamada de red, lo que acelera significativamente las operaciones por lotes.

pipe := rdb.Pipeline()

incr := pipe.Incr(ctx, "counter")pipe.Expire(ctx, "counter", time.Hour)

// Ejecutar todos los comandos_, err := pipe.Exec(ctx)if err != nil { panic(err)}

fmt.Println("Nuevo valor de counter:", incr.Val())


2.5 Pub/Sub

// Suscriptorsub := rdb.Subscribe(ctx, "mychannel")ch := sub.Channel()

for msg := range ch { fmt.Printf("Recibido: %s", msg.Payload)}

// Publicador (en otra goroutine)rdb.Publish(ctx, "mychannel", "¡Hola desde Go!")


2.6 Trabajar con clúster

clusterClient := redis.NewClusterClient(&redis.ClusterOptions{    Addrs: []string{        "localhost:7000",        "localhost:7001",        "localhost:7002",    },})

// Se usa como un cliente normalerr := clusterClient.Set(ctx, "cluster_key", "value", 0).Err()if err != nil { panic(err)}


3. radix — ligero y rápido

radix (github.com/mediocregopher/radix/v4) es un cliente minimalista con bajo nivel de abstracción. No tiene dependencias, funciona más rápido que go-redis en operaciones simples y brinda control total sobre el nivel de red.



3.1 Instalación

go get github.com/mediocregopher/radix/v4


3

Recommendations