现代化的 C++ Redis 客户端库
redis-plus-plus 是一个现代 C++ 客户端库,用于连接和操作 Redis 数据库。它提供了类型安全、异步和同步的 API,简化了 Redis 操作。
vcpkg install redis-plus-plus
git clone https://github.com/sewenew/redis-plus-plus.git
cd redis-plus-plus
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
sudo make install
#include <sw/redis++/redis++.h>
#include <iostream>
using namespace sw::redis;
int main() {
// 创建 Redis 客户端
auto redis = Redis("tcp://127.0.0.1:6379");
// 测试连接
auto val = redis.ping();
std::cout << "Ping: " << val << std::endl;
return 0;
}
#include <sw/redis++/redis++.h>
#include <iostream>
using namespace sw::redis;
int main() {
auto redis = Redis("tcp://127.0.0.1:6379");
// 设置键值
redis.set("key", "value");
// 获取键值
auto val = redis.get("key");
if (val) {
std::cout << "key = " << *val << std::endl;
}
// 设置过期时间(10秒)
redis.setex("expiring_key", 10, "will_expire");
// 删除键
redis.del("key");
return 0;
}
auto redis = Redis("tcp://127.0.0.1:6379");
// 设置 Hash 字段
redis.hset("user:1", "name", "John");
redis.hset("user:1", "age", "25");
redis.hset("user:1", "city", "Beijing");
// 获取 Hash 字段
auto name = redis.hget("user:1", "name");
if (name) {
std::cout << "Name: " << *name << std::endl;
}
// 获取所有字段
auto fields = redis.hgetall("user:1");
for (const auto& field : fields) {
std::cout << field.first << ": " << field.second << std::endl;
}
auto redis = Redis("tcp://127.0.0.1:6379");
// 从左侧推入
redis.lpush("mylist", "item1");
redis.lpush("mylist", "item2");
redis.lpush("mylist", "item3");
// 获取列表长度
auto len = redis.llen("mylist");
std::cout << "List length: " << len << std::endl;
// 获取范围(0 到 -1 表示全部)
auto items = redis.lrange("mylist", 0, -1);
for (const auto& item : items) {
std::cout << item << std::endl;
}
// 从右侧弹出
auto item = redis.rpop("mylist");
auto redis = Redis("tcp://127.0.0.1:6379");
// 添加元素
redis.sadd("myset", "a");
redis.sadd("myset", "b");
redis.sadd("myset", "c");
// 获取所有成员
auto members = redis.smembers("myset");
for (const auto& member : members) {
std::cout << member << std::endl;
}
// 检查成员是否存在
if (redis.sismember("myset", "a")) {
std::cout << "'a' exists in set" << std::endl;
}
// 获取集合大小
auto size = redis.scard("myset");
auto redis = Redis("tcp://127.0.0.1:6379");
// 添加带分数的元素
redis.zadd("leaderboard", "player1", 100);
redis.zadd("leaderboard", "player2", 200);
redis.zadd("leaderboard", "player3", 150);
// 获取排名范围(从高到低)
auto leaders = redis.zrevrange("leaderboard", 0, 2);
for (const auto& leader : leaders) {
std::cout << leader << std::endl;
}
// 获取带分数的范围
auto withScores = redis.zrevrange_withscores("leaderboard", 0, 2);
for (const auto& elem : withScores) {
std::cout << elem.first << ": " << elem.second << std::endl;
}
// 获取成员排名
auto rank = redis.zrevrank("leaderboard", "player2");
auto redis = Redis("tcp://127.0.0.1:6379");
// 使用事务
auto tx = redis.transaction();
tx.set("key1", "value1");
tx.set("key2", "value2");
tx.get("key1");
// 执行事务
tx.exec();
// Pipeline(管道,无需原子性)
auto pipe = redis.pipeline();
pipe.set("key3", "value3");
pipe.set("key4", "value4");
pipe.get("key3");
// 执行管道
auto replies = pipe.exec();
| 类型 | 操作 | 方法 |
|---|---|---|
| String | 设置/获取 | set(), get() |
| Hash | 字段操作 | hset(), hget(), hgetall() |
| List | 列表操作 | lpush(), rpop(), lrange() |
| Set | 集合操作 | sadd(), smembers(), sismember() |
| Sorted Set | 有序集合 | zadd(), zrange(), zrevrange() |