Client Redis (go-redis) pour Go : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à go-redis : un client Redis puissant pour Go

\n\n

Redis est un magasin de données clé-valeur haute performance fonctionnant en mémoire vive. Il est utilisé pour la mise en cache, la gestion de sessions, les files d'attente de messages, les classements et bien plus encore. Pour interagir avec Redis depuis Go, il existe plusieurs bibliothèques, et go-redis (le paquet github.com/redis/go-redis/v9) est la plus populaire, activement maintenue et fonctionnelle.

\n\n

Cette bibliothèque fournit une API Go propre et idiomatique pour travailler avec toutes les structures de données Redis (chaînes, listes, ensembles, hachages, ensembles triés, HyperLogLog, flux, données géospatiales) et prend en charge des fonctionnalités avancées telles que le clustering, Sentinel, Pub/Sub, le pipelining et les scripts Lua. go-redis prend entièrement en charge Redis 7 et 8.

\n\n

Dans ce guide, nous allons détailler l'installation, les méthodes principales, les erreurs typiques et écrire un exemple pratique concret.

\n\n

Installation de go-redis

\n\n

L'installation se fait avec la commande standard go get :

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

Après avoir exécuté cette commande, une dépendance apparaîtra dans votre go.mod. Assurez-vous d'avoir installé Go version 1.18 ou supérieure.

\n\n

Vous aurez également besoin d'un serveur Redis en fonctionnement (local ou distant). Pour les tests, vous pouvez lancer Redis dans Docker :

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

Démarrage rapide : connexion et première requête

\n\n

Créez un fichier main.go et écrivez un programme simple qui se connecte à Redis, écrit et lit une valeur.

\n\n
package main\n\nimport (\n    "context"\n    "fmt"\n    "github.com/redis/go-redis/v9"\n)\n\nfunc main() {\n    // Créer un contexte (recommandé : utiliser context.Background())\n    ctx := context.Background()\n\n    // Créer un client\n    rdb := redis.NewClient(&redis.Options{\n        Addr:     "localhost:6379", // adresse du serveur Redis\n        Password: "",               // mot de passe (si présent)\n        DB:       0,                // numéro de la base de données (par défaut 0)\n    })\n\n    // Vérifier la connexion avec Ping\n    pong, err := rdb.Ping(ctx).Result()\n    if err != nil {\n        panic(fmt.Sprintf("Impossible de se connecter à Redis : %v", err))\n    }\n    fmt.Println("Connecté :", pong)\n\n    // Définir la clé "name" avec la valeur "Alice"\n    err = rdb.Set(ctx, "name", "Alice", 0).Err()\n    if err != nil {\n        panic(err)\n    }\n\n    // Lire la valeur de la clé "name"\n    val, err := rdb.Get(ctx, "name").Result()\n    if err != nil {\n        panic(err)\n    }\n    fmt.Println("name :", val)\n\n    // Fermer la connexion à la fin du programme\n    defer rdb.Close()\n}
\n\n

Exécutez le programme :

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

Vous devriez voir :

\n\n
Connecté : PONG\nname : Alice
\n\n

Méthodes principales de go-redis (8 et plus)

\n\n

Toutes les méthodes de go-redis retournent un objet *Cmd (ou sa spécialisation), qui possède la méthode .Result() pour obtenir le résultat et l'erreur, .Val() pour obtenir uniquement la valeur et .Err() pour obtenir uniquement l'erreur. Cela permet de traiter les résultats de manière flexible.

\n\n

1. Set — définition de la valeur d'une clé

\n

Ce qu'il fait : Définit la valeur pour la clé spécifiée. Vous pouvez définir une durée de vie (TTL) ou 0 pour un stockage illimité.

\n

Paramètres :

\n
    \n
  • ctx context.Context — contexte pour gérer le temps d'exécution
  • \n
  • key string — nom de la clé
  • \n
  • value interface{} — valeur (sera sérialisée)
  • \n
  • expiration time.Duration — durée de vie (0 — pas de TTL)
  • \n
\n

Exemple :

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

Recommendations