← 返回库列表

🔴 redis-plus-plus 使用指南

现代化的 C++ Redis 客户端库

项目地址:https://github.com/sewenew/redis-plus-plus

官方文档:https://sewenew.github.io/redis-plus-plus/

📖 什么是 redis-plus-plus?

redis-plus-plus 是一个现代 C++ 客户端库,用于连接和操作 Redis 数据库。它提供了类型安全、异步和同步的 API,简化了 Redis 操作。

🚀 安装方式

使用 vcpkg(推荐)

vcpkg install redis-plus-plus

使用 CMake

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

💡 基础使用

连接 Redis

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

String 操作

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

Hash 操作

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;
}

List 操作

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");

Set 操作

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");

Sorted Set 操作

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()

📚 更多资源