Cache em C++: Redis e outras ferramentas
Cache é uma das técnicas-chave para otimizar o desempenho de aplicações em C++. Ela permite reduzir o tempo de acesso aos dados, diminuir a carga em bancos de dados e serviços externos. Neste artigo, veremos as principais bibliotecas e ferramentas para implementar cache em C++: desde soluções industriais baseadas em Redis e Memcached até implementações leves embutidas.
1. Redis e seus clientes C++
Redis é um armazenamento de dados in-memory do tipo chave-valor de alto desempenho, frequentemente usado como cache. Para trabalhar com Redis a partir de C++, existem duas bibliotecas principais:
1.1. hiredis
hiredis é uma biblioteca C minimalista, oficialmente suportada pelo Redis. Ela fornece API síncrona e assíncrona.
Instalação:
# Ubuntu/Debiansudo apt install libhiredis-dev
# macOSbrew install hiredis
# Compilação a partir do código-fontegit clone https://github.com/redis/hiredis.gitcd hiredis && make && sudo make installExemplo 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 << "Connection error: " << c->errstr << std::endl; return 1; }
// Definir valor redisReply *reply = (redisReply*)redisCommand(c, "SET key1 value1"); freeReplyObject(reply);
// Obter valor reply = (redisReply*)redisCommand(c, "GET key1"); if (reply->type == REDIS_REPLY_STRING) { std::cout << "Value: " << reply->str << std::endl; } freeReplyObject(reply);
redisFree(c); return 0;}1.2. redis-plus-plus
redis-plus-plus é um wrapper moderno em C++17 sobre hiredis com interface conveniente, suporte a pool de conexões, transações e pub/sub.
Instalação:
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 installExemplo:
#include <sw/redis++/redis++.h>#include <iostream>
int main() { sw::redis::Redis redis("tcp://127.0.0.1:6379");
// Definir com TTL (tempo de vida de 60 segundos) redis.setex("session:user1", 60, "active");
// Obter auto val = redis.get("session:user1"); if (val) { std::cout << "Session: " << *val << std::endl; }
// Verificar existência bool exists = redis.exists("session:user1"); std::cout << "Exists: " << std::boolalpha << exists << std::endl;
return 0;}2. Memcached e libmemcached
Memcached é outro armazenamento in-memory popular, otimizado para cache de objetos pequenos. A principal biblioteca C++ é libmemcached.
Instalação:
sudo apt install libmemcached-dev
# Compilação a partir do código-fontegit clone https://github.com/awesomized/libmemcached.gitcd libmemcached && ./configure && make && sudo make installExemplo:
#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);
// Escrita const char *key = "cache_key"; const char *value = "cached_value"; memcached_return_t rc = memcached_set(memc, k Também na biblioteca
Play Services para Kotlin: guia completo com exemplos práticos
Agendador de Tarefas PHP: gerenciador de filas semelhante ao cron em PHP
Envio de email em Java: biblioteca Jakarta Mail (JavaMail)
Trabalhando com YAML em Swift: biblioteca Yams para iOS/macOS