在 C++ 程序中使用 Redis DB 的最佳方式是什么?
9 回答
我已经分叉了虚构的 redis-cplusplus-client,使其与 redis-server v2.0 兼容,添加了缺少的 api 调用并实现了一致的哈希。还有一些高级类的早期状态将在不久的将来像 stl 类型一样可用(shared_string、shared_int、shared_set,...)。尚未准备好生产,但提供的测试已成功运行:-)
C++ 客户端官方列表
在 redis.io 上探索 Redis C++ 客户端的完整列表。您会发现有基于 boost、Qt 等的不同客户端。请注意,目前没有任何 C++ 客户端实现被标记为“推荐”。但是有一个推荐的 C 客户端,hiredis,它应该可以在 C++ 中正常工作。
https://github.com/brianwatling/redispp
我刚刚在 github 上发布了我的 c++ redis 客户端。它现在的主要功能是流水线,我将很快添加更多功能,接下来可能是分片/一致哈希。
我写了一个 C++ Redis 客户端:redis-plus-plus。它基于hiredis,用C++11 编写。它支持以下功能:
- Redis 的大多数命令。
- 连接池。
- Redis 脚本。
- 除非另有说明,否则线程安全。
- Redis 发布/订阅。
- Redis 管道。
- Redis 事务。
- Redis 集群。
- Redis 哨兵。
- Redis 流。
- 类似 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 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.
}
检查文档以获取详细信息。
使用C 绑定库?似乎在任何地方都没有可用的 C++ 包装器。
http://github.com/fictorial/redis-cplusplus-client
然而,由于很少有人真正使用 C++ 与 Redis 通信,因此没有维护这个 C++ 客户端库。
https://github.com/petrohi/hiredispp
另请查看hiredispp。它远未完成,但非常简单的实现围绕基于 C 的hiredis。Hiredis 负责处理低级协议和网络内容,而hiredispp 包装器只是使其对 C++ 友好。
另一个 C++ 客户端可以在这里找到:https ://github.com/luca3m/redis3m
它是hiredis 的包装器,带有漂亮的C++ 类、高可用性连接池和一组已经实现并可以使用的模式。