Client Redis pour Go (Golang) : go-redis et redigo
\n\nRedis est un magasin de données in-memory hautes performances, souvent utilisé comme base de données, cache et courtier de messages. Pour travailler avec Redis en langage Go (Golang), il existe plusieurs clients populaires. Dans cet article, nous examinerons en détail deux bibliothèques principales : go-redis (l'option la plus populaire et moderne) et redigo (plus bas niveau, mais éprouvée par le temps).
\n\nNous montrerons comment installer chacune d'elles, se connecter au serveur, effectuer des opérations de base, travailler avec un pool de connexions, utiliser pub/sub et le traitement par pipeline. Ce contenu sera utile aussi bien aux débutants qu'aux développeurs expérimentés souhaitant intégrer Redis dans leurs applications Go.
\n\n1. go-redis — un client moderne et fonctionnel
\n\ngo-redis est une bibliothèque cliente pour Redis écrite en Go. Elle prend en charge toutes les fonctionnalités principales de Redis 6 et 7, y compris le clustering, Sentinel, pub/sub, les transactions, le pipeline et les scripts Lua. La bibliothèque est activement développée et dispose d'une API pratique.
\n\nInstallation de go-redis
\nPour l'installation, exécutez la commande dans le terminal :
\ngo get github.com/redis/go-redis/v9\n\nConnexion et opérations de base
\nExemple d'une application simple qui se connecte à Redis, écrit et lit des données :
\npackage main\n\nimport (\n "context"\n "fmt"\n "github.com/redis/go-redis/v9"\n)\n\nfunc main() {\n ctx := context.Background()\n\n // Création du client\n rdb := redis.NewClient(&redis.Options{\n Addr: "localhost:6379",\n Password: "", // sans mot de passe\n DB: 0, // base de données par défaut\n })\n\n // Vérification de la connexion\n pong, err := rdb.Ping(ctx).Result()\n if err != nil {\n panic(err)\n }\n fmt.Println(pong) // PONG\n\n // Écriture d'une valeur\n err = rdb.Set(ctx, "key", "hello from Go", 0).Err()\n if err != nil {\n panic(err)\n }\n\n // Lecture de la valeur\n val, err := rdb.Get(ctx, "key").Result()\n if err != nil {\n panic(err)\n }\n fmt.Println("key:", val)\n}\n\nTravail avec les hachages, listes et ensembles
\ngo-redis prend en charge tous les types de données Redis. Exemple de travail avec un hachage :
\n// Écriture d'un hachage\nerr := rdb.HSet(ctx, "user:1000", map[string]interface{}{\n "name": "Alice",\n "age": 30,\n "city": "Moscow",\n}).Err()\nif err != nil {\n panic(err)\n}\n\n// Lecture d'un champ\nname, err := rdb.HGet(ctx, "user:1000", "name").Result()\nfmt.Println("Name:", name)\n\n// Lecture de tout le hachage\nuser, err := rdb.HGetAll(ctx, "user:1000").Result()\nfmt.Println("User:", user)\n\nPool de connexions et configuration
\ngo-redis gère automatiquement le pool de connexions. Vous pouvez configurer sa taille :
\nrdb := redis.NewClient(&redis.Options{\n Addr: "localhost:6379",\n PoolSize: 10, // nombre maximum de connexions dans le pool\n MinIdleConns: 3, // nombre minimum de connexions inactives\n})\n\nPub/Sub (éditeur-abonné)
\nExemple d'abonnement à un canal et de publication d'un message :
\n// Abonnement\nsub := rdb.Subscribe(ctx, "mychannel")\nch := sub.Channel()\n\n// Dans une goroutine séparée, écoute des messages\ngo func() {\n for msg := range ch {\n fmt.Printf("Received: %s from %s\\n", msg.Payload, msg.Channel)\n }\n}()\n\n// Publication\nerr := rdb.Publish(ctx, "mychannel", "Hello subscribers!").Err()\n\nPipeline (conduit)
\nPermet d'envoyer plusieurs commandes en une seule requête, ce qui accélère considérablement le travail :
\npipe := rdb.Pipeline()\n\nincr := pipe.Incr(ctx, "counter")\npipe.Expire(ctx, "counter", time.Hour)\n\n// Exécution de toutes les commandes\n_, err := pipe.Exec(ctx)\nif err != nil {\n panic(err)\n}\nfmt.Println("Counter:", incr.Val())\n\n2. Redig
Aussi dans la bibliothèque
Travailler avec Excel en Go (Golang) : bibliothèques Excelize, xlsx, tealeg
Traitement JSON en C# (.NET) : Guide complet sur Newtonsoft.Json et System.Text.Json
Tests en C++ : aperçu des frameworks et outils (Google Test, Catch2, doctest)
Internationalisation (i18n) en Go (Golang) : la bibliothèque go-i18n
Configuration des applications C++ : bibliothèques et approches