Как использовать Redis в программе на С++?

Каким будет лучший способ использовать Redis DB в программе на С++?

Ответ 1

С помощью C bindings библиотека? Кажется, что нигде не существует обертка С++.

Ответ 2

Я разветкил fictorial redis-cplusplus-client, сделал его совместимым с redis-server v2.0, добавил отсутствующие вызовы api и реализовал последовательное хеширование. Существует также раннее состояние классов высокого уровня, которые будут использоваться в качестве типов stl в ближайшем будущем (shared_string, shared_int, shared_set,...). Ничто не готово к производству, но прилагаемые тесты успешно выполняются: -)

http://github.com/mrpi/redis-cplusplus-client

Ответ 3

https://github.com/brianwatling/redispp

Я только что выпустил свой c++ клиент Redis на GitHub. Его главная особенность прямо сейчас - конвейерная обработка, я скоро добавлю больше возможностей, возможно, затем будет разделено на части/согласованное хеширование.

Ответ 4

Официальный список клиентов С++

Изучите полный список Redis С++ клиентов на redis.io. Вы найдете там разные клиенты, основанные на boost, Qt и т.д. Обратите внимание, что в настоящее время ни одна из реализаций клиента С++ не помечена как "Рекомендованная". Но есть рекомендуемый клиент C, hiredis, который должен отлично работать на С++.

Ответ 5

http://github.com/fictorial/redis-cplusplus-client

Эта клиентская библиотека С++ не поддерживается, так как мало кто на самом деле использует С++ для связи с Redis.

Ответ 6

https://github.com/petrohi/hiredispp

Также проверьте hiredispp. Это далеко не полная, но очень упрощенная реализация, которая обертывается на основе hiredis. Hiredis заботится о протоколе низкого уровня и сетевом материале, в то время как обертки hiredispp просто делают его дружественным к С++.

Ответ 7

Я написал C++ Redis-клиент: redis-plus-plus. Это основано на hiredis и написано в C++ 11. Он поддерживает следующие функции:

  • Большинство команд для Redis.
  • Пул подключений.
  • Redis скриптинг.
  • Поток безопасен, если не указано иное.
  • Redis опубликовать/подписаться.
  • Редис pipeопровод.
  • Redis транзакция.
  • Redis Cluster.
  • Redis Sentinel.
  • Redis Stream.
  • STL-подобный интерфейс.
  • Общий командный интерфейс.

Это очень быстро и просто в использовании. Если у вас есть какие-либо проблемы с этим клиентом, не стесняйтесь сообщить мне. Если вам это нравится, не стесняйтесь пометить это :)

#include <sw/redis++/redis++.h>
using namespace sw::redis;

try {
    Redis redis("tcp://127.0.0.1:6379");

    redis.set("key", "val");
    auto val = redis.get("key");
    if (val) {
        // dereference val to get the value of string type.
        std::cout << *val << std::endl;
    }   // else key does not exist.

    redis.rpush("list", {"a", "b", "c"});
    std::vector<std::string> list;
    redis.lrange("list", 0, -1, std::back_inserter(list));

    // put a vector<string> to Redis list.
    redis.rpush("another-list", list.begin(), list.end());

    auto tx = redis.transaction();

    auto tx_replies = tx.incr("num0")
                        .incr("num1")
                        .mget({"num0", "num1"})
                        .exec();

    auto redis_cluster = RedisCluster("tcp://127.0.0.1:7000");

    // RedisCluster has similar interface as Redis.
    redis_cluster.set("key", "value");
    val = redis_cluster.get("key");
} catch (const Error &err) {
    // error handling.
}

Подробности смотрите в документе.

Ответ 8

Другой клиент С++ можно найти здесь: https://github.com/luca3m/redis3m

Это оболочка hiredis, с хорошими классами С++, пулом соединений высокой доступности и набором уже реализованных и готовых к использованию шаблонов.

Ответ 9

Если вы заботитесь о производительности, попробуйте bredis. Он использует c++ 14 и boost::asio и не имеет других зависимостей (то есть ни hiredis ни libev и т.д.). Его использование может быть не таким удобным, как в других библиотеках c++, но это было компромиссным решением ради производительности и максимальной гибкости.

bredis намного проще в использовании в Windows, поскольку не имеет зависимости от hiredis.