Cache em C++: Redis, Memcached e soluções embutidas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 install


Exemplo 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 install


Exemplo:

#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 install


Exemplo:

#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

Recommendations