Como usar o Redis em um programa C++?
Pergunta
Qual seria a melhor maneira de usar um banco de dados Redis em um programa C++?
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 :-)
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.