Pergunta

Qual seria a melhor maneira de usar um banco de dados Redis em um programa C++?

Foi útil?

Solução

Usando um C ligações biblioteca? Não parece haver um invólucro C ++ disponível em nenhum lugar.

Outras dicas

Eu bifurquei o redis-cplusplus-client fictício, tornei-o compatível com o redis-server v2.0, adicionei chamadas de API ausentes e implementei hashing consistente.Há também um estado inicial de classes de alto nível que serão utilizáveis ​​como tipos stl em um futuro próximo (shared_string, shared_int, shared_set, ...).Nada está pronto para produção ainda, mas os testes fornecidos estão sendo executados com sucesso :-)

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

https://github.com/brianwatling/redispp

Acabei de lançar meu cliente C ++ Redis no Github. Seu principal recurso agora é a Pipelining, adicionarei mais recursos em breve, possivelmente hash de fragmentação/consistente em seguida.

Lista oficial de clientes C ++

Explore a lista completa do Clientes Redis C ++ em Redis.io. Você encontrará clientes diferentes com base no Boost, Qt, etc. Observe que, neste momento, nenhuma das implementações do cliente C ++ é marcada como "recomendada". Mas há um cliente C recomendado, Hiredis, o que deve funcionar bem em C ++.

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

Esta biblioteca de clientes C ++ não é mantida, no entanto, como poucas pessoas realmente usam C ++ para se comunicar com o Redis.

https://github.com/petrohi/hiredispp

Verifique também o Hiredispp. Está longe de ser uma implementação completa, mas muito simplista, que envolve o Hiredis baseado em C. A Hiredis cuida de protocolo de baixo nível e material de rede, enquanto os invólucros do Hiredispp apenas o tornam C ++ amigável.

Eu escrevi um cliente C ++ Redis: Redis-plus-plus. É baseado em Hiredis, e escrito em C ++ 11. Ele suporta os seguintes recursos:

  • A maioria dos comandos para redis.
  • Pool de conexão.
  • Redis Script.
  • Tópico seguro, a menos que indicado de outra forma.
  • Redis Publicar/assinar.
  • Pipeline Redis.
  • Transação Redis.
  • Cluster Redis.
  • Redis Sentinel.
  • Redis Stream.
  • Interface semelhante a STL.
  • Interface de comando genérico.

É muito rápido e fácil de usar. Se você tiver algum problema com este cliente, sinta -se à vontade para avise. Se você gosta, também fique à vontade para estrela :)

#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 doesn't 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.
}

Verifica a Doc para detalhes.

Outro cliente C ++ pode ser encontrado aqui: https://github.com/luca3m/redis3m

É um invólucro de Hiredis, com boas aulas de C ++, um pool de alta disponibilidade de conexão e um conjunto de padrões já implementados e prontos para uso.

Se você se preocupa com o desempenho, experimente Bredis. Usa C ++ 14 e boost::asio e não tem outras dependências (ou seja, não hiredis nem libev etc.). Seu uso pode não ser tão conveniente quanto as outras bibliotecas C ++, mas isso foi trocado por design em questão de desempenho e flexibilidade máxima.

Bredis muito mais fácil de usar no Windows, pois não tem hiredis dependência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top