Caché en C++: Redis, Memcached y soluciones integradas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Caché en C++: Redis y otras herramientas



El caché es una de las técnicas clave para optimizar el rendimiento de aplicaciones en C++. Permite reducir el tiempo de acceso a los datos, disminuir la carga en bases de datos y servicios externos. En este artículo, revisaremos las principales bibliotecas y herramientas para implementar caché en C++: desde soluciones industriales basadas en Redis y Memcached hasta implementaciones integradas ligeras.



1. Redis y sus clientes C++



Redis es un almacén de datos en memoria de tipo clave-valor de alto rendimiento, utilizado a menudo como caché. Para trabajar con Redis desde C++, existen dos bibliotecas principales:



1.1. hiredis

hiredis es una biblioteca minimalista en C, oficialmente compatible con Redis. Proporciona una API síncrona y asíncrona.

Instalación:

# Ubuntu/Debiansudo apt install libhiredis-dev

# macOSbrew install hiredis

# Compilación desde el código fuentegit clone https://github.com/redis/hiredis.gitcd hiredis && make && sudo make install


Ejemplo de uso (modo síncrono):

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

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

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

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

redisFree(c); return 0;}


1.2. redis-plus-plus

redis-plus-plus es un envoltorio moderno de C++17 sobre hiredis con una interfaz conveniente, soporte para pool de conexiones, transacciones y pub/sub.

Instalación:

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


Ejemplo:

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

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

// Establecer con TTL (tiempo de vida 60 segundos) redis.setex("session:user1", 60, "active");

// Obtener auto val = redis.get("session:user1"); if (val) { std::cout << "Sesión: " << *val << std::endl; }

// Verificar existencia bool exists = redis.exists("session:user1"); std::cout << "Existe: " << std::boolalpha << exists << std::endl;

return 0;}


2. Memcached y libmemcached



Memcached es otro almacén en memoria popular, optimizado para el caché de objetos pequeños. La biblioteca principal de C++ es libmemcached.

Instalación:

sudo apt install libmemcached-dev

# Compilación desde el código fuentegit clone https://github.com/awesomized/libmemcached.gitcd libmemcached && ./configure && make && sudo make install


Ejemplo:

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

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

Recommendations