Redis клиент для C++: обзор и практическое руководство
Redis — это высокопроизводительная in-memory база данных, широко используемая для кэширования, управления сессиями, очередей сообщений и real-time аналитики. Для взаимодействия с Redis на языке C++ существует несколько зрелых библиотек. В этой статье мы рассмотрим две наиболее популярные: hiredis (официальный C-клиент, легко интегрируемый в C++) и Redis++ (современный C++17 клиент с удобным синтаксисом). Вы узнаете, как установить, подключить и использовать эти инструменты в своих проектах.
1. Библиотека hiredis
hiredis — это минималистичный C-клиент, разработанный той же командой, что и Redis. Он лёгкий, быстрый и поддерживает синхронные и асинхронные запросы. Для C++ программистов hiredis служит отличной основой, так как её можно напрямую вызывать из C++ кода, оборачивая в RAII-объекты.
Установка hiredis
Установка hiredis выполняется через пакетный менеджер или сборку из исходников:
# Ubuntu/Debian
sudo apt-get install libhiredis-dev
# macOS (Homebrew)
brew install hiredis
# Сборка из исходников
git clone https://github.com/redis/hiredis.git
cd hiredis
make
sudo make install
Подключение и базовый пример
Для работы с hiredis необходимо подключить заголовочный файл и слинковаться с библиотекой. Ниже приведён пример подключения к Redis и выполнения простейших команд:
#include <iostream>
#include <hiredis/hiredis.h>
int main() {
// Подключение к Redis на localhost:6379
redisContext *c = redisConnect("127.0.0.1", 6379);
if (c == nullptr || c->err) {
std::cerr << "Ошибка подключения: " << c->errstr << std::endl;
return 1;
}
// Отправка команды SET
redisReply *reply = (redisReply*)redisCommand(c, "SET key1 Hello");
if (reply->type == REDIS_REPLY_STATUS) {
std::cout << "SET: " << reply->str << std::endl;
}
freeReplyObject(reply);
// Отправка команды GET
reply = (redisReply*)redisCommand(c, "GET key1");
if (reply->type == REDIS_REPLY_STRING) {
std::cout << "GET: " << reply->str << std::endl;
}
freeReplyObject(reply);
// Освобождение ресурсов
redisFree(c);
return 0;
}
Компиляция выполняется с флагом -lhiredis:
g++ -o test test.cpp -lhiredis
2. Библиотека Redis++ (sw/redis++ / redox)
Redis++ (известная также как sw/redis++) — это современный C++17 клиент, который предоставляет типобезопасный интерфейс, поддержку пула соединений, транзакций, pipeline и Redis Cluster. Если вы предпочитаете писать на "чистом" C++ без C-стиля, Redis++ — идеальный выбор.
Установка Redis++
Установка осуществляется через vcpkg, Conan или сборку из исходников:
# Через vcpkg
vcpkg install redis-plus-plus
# Через Conan
conan install redis++/1.3.3@
# Сборка из исходников
git clone https://github.com/sewenew/redis-plus-plus.git
cd redis-plus-plus
mkdir build && cd build
cmake ..
make
sudo make install
Пример использования Redis++
Библиотека использует объект Redis для работы с командами:
#include <iostream>
#include <sw/redis++/redis++.h>
int main() {
try {
// Создание клиента
sw::redis::Redis redis("tcp://127.0.0.1:6379");
// Установка значения
redis.set("mykey", "Hello, Redis++!");
// Получение значения
auto val = redis.get("mykey");
if (val) {
std::cout << "GET: " << *val << std::endl;
}
// Работа с хэшами
redis.hset("user:1", "name", "Alice");
redis.hset("user:1", "age", "30");
auto name = redis.hget("user:1", "name");
std::cout << "User name: " << *name << std::endl;
// Список: push и pop
redis.lpush("mylist", "item1");
redis.lpush("mylist", "item2");
auto item = redis.r