Cliente Redis para C++: guia completo para trabalhar com hiredis
Redis é um popular banco de dados in-memory, usado para cache, gerenciamento de sessões, filas de mensagens e muito mais. Para interagir com Redis a partir de aplicações em C++, existem várias bibliotecas, mas a mais comum e confiável é o hiredis. Esta biblioteca minimalista, rápida e estável fornece uma API C pura, que é facilmente integrada em projetos C++. Neste artigo, vamos detalhar como instalar o hiredis, conectá-lo ao projeto, executar operações básicas com Redis e tratar possíveis erros.
O que é hiredis?
hiredis é o cliente C oficial para Redis, desenvolvido pela mesma equipe que criou o Redis. Ele suporta:
- Conexões síncronas e assíncronas
- Reconexão automática em caso de queda de conexão
- Transmissão de comandos em pipeline (pipelining)
- Trabalho com dados binários
- Suporte completo ao protocolo Redis (RESP2 e RESP3)
Apesar de o hiredis ser escrito em C, ele é perfeitamente adequado para projetos C++: pode ser encapsulado em classes RAII, usado com expressões modernas do C++11/17 e facilmente combinado com outras bibliotecas.
Instalação do hiredis
A maneira mais simples de instalar é através do gerenciador de pacotes do sistema. Exemplos para diferentes SOs:
Ubuntu / Debian
sudo apt updatesudo apt install libhiredis-devmacOS (Homebrew)
brew install hiredisWindows (vcpkg)
vcpkg install hiredisSe preferir compilar o hiredis a partir do código-fonte (por exemplo, para configuração personalizada):
git clone https://github.com/redis/hiredis.gitcd hiredismakesudo make installConexão ao servidor Redis
Após instalar o hiredis, você pode conectá-lo ao seu projeto C++. Certifique-se de que as configurações do compilador incluam os caminhos para os arquivos de cabeçalho e bibliotecas:
-I/usr/include(ou caminho parahiredis.h)-lhiredispara linkagem
Exemplo de código mínimo para conectar a um Redis rodando em localhost:6379:
#include <hiredis/hiredis.h>#include <iostream>
int main() { // Conecta ao Redis redisContext *c = redisConnect("127.0.0.1", 6379); if (c == nullptr || c->err) { if (c) { std::cerr << "Erro de conexão: " << c->errstr << std::endl; redisFree(c); } else { std::cerr << "Não foi possível alocar memória para o contexto" << std::endl; } return 1; } std::cout << "Conexão com Redis estabelecida!" << std::endl;
// Libera recursos redisFree(c); return 0;}Envio de comandos e recebimento de respostas
O hiredis fornece a função redisCommand para enviar comandos. Ela retorna um ponteiro para redisReply, que contém o resultado da execução. Sempre verifique se a resposta não é nullptr e libere a memória após o uso.
Vamos considerar operações básicas: definir e obter um valor de string.
#include <hiredis/hiredis.h>#include <iostream>#include <string>
int main() { redisContext *c = redisConnect("127.0.0.1", 6379); if (!c || c->err) { std::cerr << "Erro de conexão: " << (c ? c->errstr : "null") << std::endl; return 1; }
// Define a chave "myname" com o valor "C++ Developer" redisReply *reply = (redisReply*)redisCommand(c, "SET myname 'C++ Developer'"); if (reply == nullptr) { std::cerr << "Erro ao executar o comando SET" << std::endl; redisFree(c); return Também na biblioteca
TBB (Intel Threading Building Blocks) para C++: guia completo com exemplos
Processamento de Markdown em Rust: bibliotecas, parsers e ferramentas
Trabalho com datas em PHP: visão geral de bibliotecas e ferramentas