如何在C ++程序中使用Redis?

时间:2010-02-02 02:08:08

标签: c++ database redis

在C ++程序中使用Redis DB的最佳方法是什么?

9 个答案:

答案 0 :(得分:13)

我已经将redis-cplusplus客户端分叉,使其与redis-server v2.0兼容,添加了丢失的api调用并实现了一致的散列。 还有一个早期的高级类状态,在不久的将来可以像stl类型一样使用(shared_string,shared_int,shared_set,...)。什么都没有生产就绪,但提供的测试成功运行: - )

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

答案 1 :(得分:4)

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

但是没有维护这个C ++客户端库,因为实际上很少有人使用C ++与Redis进行通信。

答案 2 :(得分:4)

https://github.com/brianwatling/redispp

我刚刚在github上发布了我的c ++ redis客户端。它现在的主要功能是流水线操作,我将很快添加更多功能,接下来可能会进行分片/一致哈希。

答案 3 :(得分:4)

C ++客户端的官方列表

探索Redis C++ clients on redis.io完整列表。你会发现有不同的客户端基于boost,Qt等。请注意,目前没有一个C ++客户端实现被标记为“推荐”。但是有一个推荐的C客户端hiredis,它在C ++中可以正常工作。

答案 4 :(得分:3)

使用C bindings库?似乎没有任何地方可以使用C ++包装器。

答案 5 :(得分:1)

https://github.com/petrohi/hiredispp

另请查看hiredispp。它远非完整,但包含基于C的hiredis的非常简单的实现。 Hiredis负责低级协议和网络工作,而hiredispp包装器只是让C ++友好。

答案 6 :(得分:1)

可以在此处找到另一个C ++客户端:https://github.com/luca3m/redis3m

它是hiredis的包装器,具有漂亮的C ++类,高可用性连接池和一组已经实现并可以使用的模式。

答案 7 :(得分:1)

我写了一个C ++ Redis客户端:redis-plus-plus。它基于 hiredis 并用C ++ 11编写。它支持以下功能:

  • Redis的大多数命令。
  • 连接池。
  • Redis脚本。
  • 除非另有说明,否则线程安全。
  • Redis发布/订阅。
  • Redis管道。
  • Redis交易。
  • Redis群集。
  • Redis Sentinel。
  • 类似STL的界面。

它非常快速且易于使用。如果您对此客户有任何疑问,请随时let me know。如果您喜欢它,也可以随时对其进行标记:)

#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.
}

检查doc以获得详细信息。

答案 8 :(得分:0)

如果您关心性能,请尝试bredis。它使用c ++ 14和boost::asio并且没有其他依赖项(即没有hiredislibev等)。它的用法可能不如其他C ++库那样方便,但是出于性能和最大灵活性的考虑,在设计上要进行权衡。

bredis在Windows上更易于使用,因为它没有hiredis依赖性。