Redis-Client für Go (Golang): go-redis und redigo
\n\nRedis ist ein Hochleistungs-In-Memory-Datenspeicher, der häufig als Datenbank, Cache und Nachrichtenbroker verwendet wird. Für die Arbeit mit Redis in der Sprache Go (Golang) gibt es mehrere beliebte Clients. In diesem Artikel betrachten wir zwei Hauptbibliotheken im Detail: go-redis (die beliebteste und modernste Option) und redigo (niedrigschwelliger, aber bewährt).
\n\nWir zeigen, wie man jede von ihnen installiert, eine Verbindung zum Server herstellt, grundlegende Operationen durchführt, mit einem Verbindungspool arbeitet, Pub/Sub und Pipeline verwendet. Das Material ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich, die Redis in ihre Go-Anwendungen integrieren möchten.
\n\n1. go-redis – moderner und funktionsreicher Client
\n\ngo-redis ist eine in Go geschriebene Client-Bibliothek für Redis. Sie unterstützt alle wichtigen Funktionen von Redis 6 und 7, einschließlich Clustering, Sentinel, Pub/Sub, Transaktionen, Pipeline und Lua-Skripte. Die Bibliothek wird aktiv weiterentwickelt und bietet eine benutzerfreundliche API.
\n\nInstallation von go-redis
\nFühren Sie zur Installation den folgenden Befehl im Terminal aus:
\ngo get github.com/redis/go-redis/v9\n\nVerbindung und grundlegende Operationen
\nBeispiel einer einfachen Anwendung, die eine Verbindung zu Redis herstellt, Daten schreibt und liest:
\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 // Client erstellen\n rdb := redis.NewClient(&redis.Options{\n Addr: "localhost:6379",\n Password: "", // ohne Passwort\n DB: 0, // Standarddatenbank\n })\n\n // Verbindung prüfen\n pong, err := rdb.Ping(ctx).Result()\n if err != nil {\n panic(err)\n }\n fmt.Println(pong) // PONG\n\n // Wert schreiben\n err = rdb.Set(ctx, "key", "hello from Go", 0).Err()\n if err != nil {\n panic(err)\n }\n\n // Wert lesen\n val, err := rdb.Get(ctx, "key").Result()\n if err != nil {\n panic(err)\n }\n fmt.Println("key:", val)\n}\n\nArbeiten mit Hashes, Listen und Mengen
\ngo-redis unterstützt alle Redis-Datentypen. Beispiel für die Arbeit mit einem Hash:
\n// Hash schreiben\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// Ein Feld lesen\nname, err := rdb.HGet(ctx, "user:1000", "name").Result()\nfmt.Println("Name:", name)\n\n// Ganzen Hash lesen\nuser, err := rdb.HGetAll(ctx, "user:1000").Result()\nfmt.Println("User:", user)\n\nVerbindungspool und Konfiguration
\ngo-redis verwaltet den Verbindungspool automatisch. Sie können dessen Größe anpassen:
\nrdb := redis.NewClient(&redis.Options{\n Addr: "localhost:6379",\n PoolSize: 10, // maximale Anzahl von Verbindungen im Pool\n MinIdleConns: 3, // minimale Anzahl von Leerlaufverbindungen\n})\n\nPub/Sub (Publisher-Subscriber)
\nBeispiel für das Abonnieren eines Kanals und das Veröffentlichen einer Nachricht:
\n// Abonnieren\nsub := rdb.Subscribe(ctx, "mychannel")\nch := sub.Channel()\n\n// In einer separaten Goroutine Nachrichten empfangen\ngo func() {\n for msg := range ch {\n fmt.Printf("Received: %s from %s\\n", msg.Payload, msg.Channel)\n }\n}()\n\n// Veröffentlichen\nerr := rdb.Publish(ctx, "mychannel", "Hello subscribers!").Err()\n\nPipeline
\nErmöglicht das Senden mehrerer Befehle in einer einzigen Anfrage, was die Arbeit erheblich beschleunigt:
\npipe := rdb.Pipeline()\n\nincr := pipe.Incr(ctx, "counter")\npipe.Expire(ctx, "counter", time.Hour)\n\n// Alle Befehle ausführen\n_, err := pipe.Exec(ctx)\nif err != nil {\n panic(err)\n}\nfmt.Println("Counter:", incr.Val())\n\n2. Redig
Auch in der Bibliothek
E-Mail-Versand mit Go (Golang): Bibliotheken und Codebeispiele
Internationalisierung (i18n) in TypeScript: die Bibliothek i18next
GraphQL für Swift: Apollo iOS — Client für iOS und macOS
WebSocket-Bibliothek Ratchet für PHP: Echtzeit-Anwendungen auf der Website
Firebase Android SDK für Kotlin: Komplettguide mit Beispielen