Redis клиент для C++: подключение, установка и примеры

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Redis клиент для C++: полное руководство по работе с hiredis

Redis — это популярная in-memory база данных, используемая для кэширования, управления сессиями, очередей сообщений и многого другого. Для взаимодействия с Redis из приложений на C++ существует несколько библиотек, но самой распространённой и надёжной является hiredis. Эта минималистичная, быстрая и стабильная библиотека предоставляет чистый C API, который легко интегрируется в C++ проекты. В этой статье мы подробно разберём, как установить hiredis, подключить её к проекту, выполнить базовые операции с Redis и обработать возможные ошибки.

Что такое hiredis?

hiredis — это официальный C-клиент для Redis, разработанный той же командой, что и сам Redis. Он поддерживает:

  • Синхронные и асинхронные соединения
  • Автоматическое переподключение при обрыве связи
  • Потоковую передачу команд (pipelining)
  • Работу с бинарными данными
  • Полную поддержку протокола Redis (RESP2 и RESP3)

Несмотря на то, что hiredis написан на C, он отлично подходит для C++ проектов: его можно обернуть в RAII-классы, использовать с современными идиомами C++11/17 и легко комбинировать с другими библиотеками.

Установка hiredis

Самый простой способ установки — через системный пакетный менеджер. Примеры для разных ОС:

Ubuntu / Debian

sudo apt update
sudo apt install libhiredis-dev

macOS (Homebrew)

brew install hiredis

Windows (vcpkg)

vcpkg install hiredis

Если вы предпочитаете собрать hiredis из исходников (например, для кастомной конфигурации):

git clone https://github.com/redis/hiredis.git
cd hiredis
make
sudo make install

Подключение к Redis серверу

После установки hiredis вы можете подключить её к вашему C++ проекту. Убедитесь, что в настройках компилятора указаны пути к заголовочным файлам и библиотекам:

  • -I/usr/include (или путь к hiredis.h)
  • -lhiredis для линковки

Пример минимального кода для подключения к Redis, работающему на localhost:6379:

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

int main() {
    // Подключаемся к Redis
    redisContext *c = redisConnect("127.0.0.1", 6379);
    if (c == nullptr || c->err) {
        if (c) {
            std::cerr << "Ошибка подключения: " << c->errstr << std::endl;
            redisFree(c);
        } else {
            std::cerr << "Не удалось выделить память для контекста" << std::endl;
        }
        return 1;
    }
    std::cout << "Подключение к Redis установлено!" << std::endl;

    // Освобождаем ресурсы
    redisFree(c);
    return 0;
}

Отправка команд и получение ответов

hiredis предоставляет функцию redisCommand для отправки команд. Она возвращает указатель на redisReply, который содержит результат выполнения. Всегда проверяйте, что ответ не равен nullptr, и освобождайте память после использования.

Рассмотрим базовые операции: установка и получение строкового значения.

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

int main() {
    redisContext *c = redisConnect("127.0.0.1", 6379);
    if (!c || c->err) {
        std::cerr << "Ошибка подключения: " << (c ? c->errstr : "null") << std::endl;
        return 1;
    }

    // Устанавливаем ключ "myname" со значением "C++ Developer"
    redisReply *reply = (redisReply*)redisCommand(c, "SET myname 'C++ Developer'");
    if (reply == nullptr) {
        std::cerr << "Ошибка выполнения команды SET" << std::endl;
        redisFree(c);
        return 1;
    }
    std::cout << "SET: " << reply->str << std::endl; // Должно вывести "OK"
    freeReplyObject(reply);

    // Получаем значение ключа "myname"
    reply = (redisReply*)redisCommand(c, "GET myname");
    if (reply == nullptr) {
        std::cerr << "Ошибка выполнения команды GET" << std                    

Рекомендаций