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 installEjemplo 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 installEjemplo:
#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 installEjemplo:
#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 También en la biblioteca
Generador de códigos QR en Swift: biblioteca EFQRCode para iOS y macOS
Monitoreo de aplicaciones Rust: la biblioteca `tracing`
Pruebas en TypeScript con Jest