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, Memcached e soluções embutidas



Cache é uma das ferramentas-chave para otimizar o desempenho de aplicações em C++. Ele permite reduzir o tempo de acesso aos dados, diminuir a carga em bancos de dados e acelerar o processamento de requisições. Neste artigo, vamos explorar três abordagens principais para cache em C++: o uso de sistemas externos Redis e Memcached, bem como a criação de soluções embutidas usando contêineres e bibliotecas padrão. Você aprenderá quando escolher cada abordagem e verá exemplos práticos de código.



Por que usar cache em C++?



Aplicações em C++ frequentemente trabalham com grandes volumes de dados: desde servidores web até motores de jogos e sistemas de tempo real. Sem cache, cada requisição pode levar a operações caras de entrada/saída ou cálculos complexos. O cache armazena dados frequentemente solicitados em memória rápida, proporcionando:

  • Redução de latência — o acesso à memória RAM é 100-1000 vezes mais rápido que ao disco ou rede.
  • Diminuição da carga — bancos de dados e serviços externos recebem menos requisições.
  • Aumento da capacidade de processamento — a aplicação processa mais requisições por segundo.


Sistemas de cache externos: Redis



O que é Redis?

Redis é um armazenamento de dados in-memory do tipo chave-valor com suporte a estruturas complexas (listas, conjuntos, hashes). Ele funciona como um servidor separado, com o qual a aplicação C++ se comunica pela rede. Redis é ideal para sistemas distribuídos, onde o cache precisa ser compartilhado entre vários processos ou máquinas.



Conectando-se ao Redis a partir do C++

Para trabalhar com Redis em C++, use a biblioteca hiredis — um cliente minimalista em C. Exemplo de conexão e execução de uma requisição simples:

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

int main() { // Conecta ao Redis em localhost:6379 redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { std::cerr << "Erro de conexão: " << c->errstr << std::endl; return 1; }

// Define a chave redisReply *reply = (redisReply*)redisCommand(c, "SET key %s", "value_cpp"); freeReplyObject(reply);

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

redisFree(c); return 0;}


Vantagens e desvantagens do Redis

  • + Alta velocidade (microssegundos), suporte a TTL, replicação, persistência.
  • + Conjunto rico de estruturas de dados (strings, listas, hashes, bitmaps).
  • - Requer um servidor separado e comunicação via rede.
  • - Dependência de infraestrutura externa.


Sistemas de cache externos: Memcached



O que é Memcached?

Memcached é um sistema de cache distribuído de alta performance em memória. Diferente do Redis, ele suporta apenas pares simples chave-valor e não possui persistência embutida. Memcached é ideal para armazenar em cache resultados de consultas SQL, fragmentos HTML e sessões.



Conectando-se ao Memcached a partir do C++

Para C++, use libmemcached — uma biblioteca popular com API em C. 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, serve

Blogs

Book Recommendations