Redis-Client für C++: Vollständige Anleitung zur Arbeit mit hiredis
Redis ist eine beliebte In-Memory-Datenbank, die für Caching, Sitzungsverwaltung, Nachrichtenwarteschlangen und vieles mehr verwendet wird. Für die Interaktion mit Redis aus C++-Anwendungen gibt es mehrere Bibliotheken, aber die gebräuchlichste und zuverlässigste ist hiredis. Diese minimalistische, schnelle und stabile Bibliothek bietet eine reine C-API, die sich leicht in C++-Projekte integrieren lässt. In diesem Artikel werden wir im Detail besprechen, wie man hiredis installiert, in ein Projekt einbindet, grundlegende Operationen mit Redis durchführt und mögliche Fehler behandelt.
Was ist hiredis?
hiredis ist der offizielle C-Client für Redis, der vom selben Team entwickelt wurde wie Redis selbst. Er unterstützt:
- Synchron- und asynchrone Verbindungen
- Automatische Wiederverbindung bei Verbindungsabbruch
- Befehls-Pipelining
- Arbeit mit Binärdaten
- Vollständige Unterstützung des Redis-Protokolls (RESP2 und RESP3)
Obwohl hiredis in C geschrieben ist, eignet es sich hervorragend für C++-Projekte: Es kann in RAII-Klassen gekapselt, mit modernen C++11/17-Idiomen verwendet und problemlos mit anderen Bibliotheken kombiniert werden.
Installation von hiredis
Der einfachste Weg der Installation erfolgt über den systemeigenen Paketmanager. Beispiele für verschiedene Betriebssysteme:
Ubuntu / Debian
sudo apt updatesudo apt install libhiredis-devmacOS (Homebrew)
brew install hiredisWindows (vcpkg)
vcpkg install hiredisWenn Sie hiredis lieber aus dem Quellcode erstellen möchten (z. B. für eine benutzerdefinierte Konfiguration):
git clone https://github.com/redis/hiredis.gitcd hiredismakesudo make installVerbindung zum Redis-Server
Nach der Installation von hiredis können Sie es in Ihr C++-Projekt einbinden. Stellen Sie sicher, dass in den Compiler-Einstellungen die Pfade zu den Header-Dateien und Bibliotheken angegeben sind:
-I/usr/include(oder Pfad zuhiredis.h)-lhirediszum Linken
Beispiel für minimalen Code zur Verbindung mit einem Redis, der auf localhost:6379 läuft:
#include <hiredis/hiredis.h>#include <iostream>
int main() { // Mit Redis verbinden redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { if (c) { std::cerr << "Verbindungsfehler: " << c->errstr << std::endl; redisFree(c); } else { std::cerr << "Speicher für Kontext konnte nicht zugewiesen werden" << std::endl; } return 1; } std::cout << "Verbindung zu Redis hergestellt!" << std::endl;
// Ressourcen freigeben redisFree(c); return 0;}Befehle senden und Antworten empfangen
hiredis stellt die Funktion redisCommand zum Senden von Befehlen bereit. Sie gibt einen Zeiger auf redisReply zurück, der das Ausführungsergebnis enthält. Überprüfen Sie immer, ob die Antwort nicht nullptr ist, und geben Sie den Speicher nach der Verwendung frei.
Betrachten wir grundlegende Operationen: Setzen und Abrufen eines Zeichenkettenwerts.
#include <hiredis/hiredis.h>#include <iostream>#include <string>
int main() { redisContext *c = redisConnect("127.0.0.1", 6379); if (!c || c->err) { std::cerr << "Verbindungsfehler: " << (c ? c->errstr : "null") << std::endl; return 1; }
// Setze den Schlüssel "myname" mit dem Wert "C++ Developer" redisReply *reply = (redisReply*)redisCommand(c, "SET myname 'C++ Developer'"); if (reply == nullptr) { std::cerr << "Fehler bei der Ausführung des SET-Befehls" << std::endl; redisFree(c); return