Caching in C++: Redis, Memcached und integrierte Lösungen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten
```html

Caching in C++: Redis, Memcached und eingebaute Lösungen



Caching ist eines der wichtigsten Werkzeuge zur Optimierung der Leistung von C++-Anwendungen. Es verkürzt die Zugriffszeit auf Daten, reduziert die Last auf Datenbanken und beschleunigt die Verarbeitung von Anfragen. In diesem Artikel betrachten wir drei grundlegende Ansätze zum Caching in C++: die Verwendung der externen Systeme Redis und Memcached sowie die Erstellung eingebauter Lösungen mit Standardcontainern und Bibliotheken. Sie erfahren, wann welcher Ansatz zu wählen ist, und sehen praktische Codebeispiele.



Warum ist Caching in C++ notwendig?



C++-Anwendungen arbeiten oft mit großen Datenmengen: von Webservern über Spiele-Engines bis hin zu Echtzeitsystemen. Ohne Caching kann jede Anfrage zu teuren Ein-/Ausgabeoperationen oder komplexen Berechnungen führen. Der Cache speichert häufig angefragte Daten im schnellen Arbeitsspeicher, was Folgendes bietet:

  • Reduzierung von Latenzen — der Zugriff auf RAM ist 100-1000 Mal schneller als auf Festplatte oder Netzwerk.
  • Verringerung der Last — Datenbanken und externe Dienste erhalten weniger Anfragen.
  • Erhöhung des Durchsatzes — die Anwendung verarbeitet mehr Anfragen pro Sekunde.


Externe Caching-Systeme: Redis



Was ist Redis?

Redis ist ein In-Memory-Datenspeicher vom Typ „Schlüssel-Wert“ mit Unterstützung für komplexe Strukturen (Listen, Mengen, Hashes). Es funktioniert als separater Server, mit dem die C++-Anwendung über das Netzwerk kommuniziert. Redis ist ideal für verteilte Systeme, in denen der Cache für mehrere Prozesse oder Maschinen gemeinsam genutzt werden soll.



Verbindung zu Redis aus C++

Für die Arbeit mit Redis in C++ verwenden Sie die Bibliothek hiredis — einen minimalistischen C-Client. Beispiel für eine Verbindung und die Ausführung einer einfachen Abfrage:

#include <hiredis/hiredis.h>#include <iostream>#include <string>

int main() { // Verbindung zu Redis auf localhost:6379 herstellen redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { std::cerr << "Verbindungsfehler: " << c->errstr << std::endl; return 1; }

// Schlüssel setzen redisReply *reply = (redisReply*)redisCommand(c, "SET key %s", "value_cpp"); freeReplyObject(reply);

// Wert abrufen reply = (redisReply*)redisCommand(c, "GET key"); if (reply->type == REDIS_REPLY_STRING) { std::cout << "Wert: " << reply->str << std::endl; } freeReplyObject(reply);

redisFree(c); return 0;}


Vorteile und Nachteile von Redis

  • + Hohe Geschwindigkeit (Mikrosekunden), Unterstützung von TTL, Replikation, Persistenz.
  • + Reicher Satz an Datenstrukturen (Zeichenketten, Listen, Hashes, Bitmaps).
  • - Erfordert einen separaten Server und Netzwerkkommunikation.
  • - Abhängigkeit von externer Infrastruktur.


Externe Caching-Systeme: Memcached



Was ist Memcached?

Memcached ist ein hochleistungsfähiges, verteiltes In-Memory-Caching-System. Im Gegensatz zu Redis unterstützt es nur einfache Schlüssel-Wert-Paare und verfügt über keine integrierte Persistenz. Memcached eignet sich ideal zum Cachen von Ergebnissen von SQL-Abfragen, HTML-Fragmenten und Sitzungen.



Verbindung zu Memcached aus C++

Für C++ verwenden Sie libmemcached — eine beliebte Bibliothek mit C-API. Beispiel:

#include <libmemcached/memcached.h>#include <iostream>#include <cstring>

int main() { memcached_st *memc = memcached_create(nullptr); memcached_server_st *servers = memcached_server_list_append(nullptr, "127.0.0.1", 11211, nullptr); memcached_server_push(memc, servers); ```

Blogs

Buchempfehlungen