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

Caching in C++: Redis und andere Tools



Caching ist eine der wichtigsten Techniken zur Leistungsoptimierung von C++-Anwendungen. Es verkürzt die Zugriffszeit auf Daten und reduziert die Last auf Datenbanken und externe Dienste. In diesem Artikel betrachten wir die wichtigsten Bibliotheken und Tools zur Implementierung von Caching in C++: von industriellen Lösungen auf Basis von Redis und Memcached bis hin zu leichtgewichtigen integrierten Implementierungen.



1. Redis und seine C++-Clients



Redis ist ein leistungsstarker In-Memory-Datenspeicher vom Typ „Schlüssel-Wert“, der häufig als Cache verwendet wird. Für die Arbeit mit Redis aus C++ gibt es zwei Hauptbibliotheken:



1.1. hiredis

hiredis ist eine minimalistische C-Bibliothek, die offiziell von Redis unterstützt wird. Sie bietet eine synchrone und asynchrone API.

Installation:

# Ubuntu/Debiansudo apt install libhiredis-dev

# macOSbrew install hiredis

# Build aus den Quellengit clone https://github.com/redis/hiredis.gitcd hiredis && make && sudo make install


Anwendungsbeispiel (synchroner Modus):

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

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

// Wert setzen redisReply *reply = (redisReply*)redisCommand(c, "SET key1 value1"); freeReplyObject(reply);

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

redisFree(c); return 0;}


1.2. redis-plus-plus

redis-plus-plus ist ein moderner C++17-Wrapper um hiredis mit einer benutzerfreundlichen Oberfläche, Unterstützung für Verbindungspools, Transaktionen und pub/sub.

Installation:

git clone https://github.com/sewenew/redis-plus-plus.gitcd redis-plus-plusmkdir build && cd buildcmake -DREDIS_PLUS_PLUS_CXX_STANDARD=17 ..make && sudo make install


Beispiel:

#include <sw/redis++/redis++.h>#include <iostream>

int main() { sw::redis::Redis redis("tcp://127.0.0.1:6379");

// Setzen mit TTL (Lebensdauer 60 Sekunden) redis.setex("session:user1", 60, "active");

// Abrufen auto val = redis.get("session:user1"); if (val) { std::cout << "Sitzung: " << *val << std::endl; }

// Existenzprüfung bool exists = redis.exists("session:user1"); std::cout << "Existiert: " << std::boolalpha << exists << std::endl;

return 0;}


2. Memcached und libmemcached



Memcached ist ein weiterer beliebter In-Memory-Speicher, der für das Caching kleiner Objekte optimiert ist. Die wichtigste C++-Bibliothek ist libmemcached.

Installation:

sudo apt install libmemcached-dev

# Build aus den Quellengit clone https://github.com/awesomized/libmemcached.gitcd libmemcached && ./configure && make && sudo make install


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); memcached_server_list_free(servers);

// Schreiben const char *key = "cache_key"; const char *value = "cached_value"; memcached_return_t rc = memcached_set(memc, k

Empfehlungen