Mise en cache en C++ : Redis, Memcached et solutions intégrées

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Mise en cache en C++ : Redis et autres outils



La mise en cache est l'une des techniques clés pour optimiser les performances des applications en C++. Elle permet de réduire le temps d'accès aux données, de diminuer la charge sur les bases de données et les services externes. Dans cet article, nous examinerons les principales bibliothèques et outils pour implémenter la mise en cache en C++ : des solutions industrielles basées sur Redis et Memcached aux implémentations légères intégrées.



1. Redis et ses clients C++



Redis est un stockage de données en mémoire de type « clé-valeur » hautes performances, souvent utilisé comme cache. Pour travailler avec Redis depuis C++, il existe deux bibliothèques principales :



1.1. hiredis

hiredis est une bibliothèque C minimaliste officiellement supportée par Redis. Elle fournit une API synchrone et asynchrone.

Installation :

# Ubuntu/Debiansudo apt install libhiredis-dev

# macOSbrew install hiredis

# Compilation depuis les sourcesgit clone https://github.com/redis/hiredis.gitcd hiredis && make && sudo make install


Exemple d'utilisation (mode synchrone) :

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

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

// Définition d'une valeur redisReply *reply = (redisReply*)redisCommand(c, "SET key1 value1"); freeReplyObject(reply);

// Récupération de la valeur reply = (redisReply*)redisCommand(c, "GET key1"); if (reply->type == REDIS_REPLY_STRING) { std::cout << "Valeur : " << reply->str << std::endl; } freeReplyObject(reply);

redisFree(c); return 0;}


1.2. redis-plus-plus

redis-plus-plus est une enveloppe C++17 moderne autour de hiredis avec une interface pratique, le support du pool de connexions, des transactions et de 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


Exemple :

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

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

// Définition avec TTL (durée de vie de 60 secondes) redis.setex("session:user1", 60, "active");

// Récupération auto val = redis.get("session:user1"); if (val) { std::cout << "Session : " << *val << std::endl; }

// Vérification d'existence bool exists = redis.exists("session:user1"); std::cout << "Existe : " << std::boolalpha << exists << std::endl;

return 0;}


2. Memcached et libmemcached



Memcached est un autre stockage en mémoire populaire, optimisé pour la mise en cache de petits objets. La bibliothèque C++ principale est libmemcached.

Installation :

sudo apt install libmemcached-dev

# Compilation depuis les sourcesgit clone https://github.com/awesomized/libmemcached.gitcd libmemcached && ./configure && make && sudo make install


Exemple :

#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);

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

Recommendations