Redis C++ 客户端使用指南-Zset 篇
八月 16, 2025
次阅读
Redis++(C++)ZSet(有序集合)类型常用接口详解
在 C++ 后端开发中,redis++ 提供了丰富的 ZSet(有序集合)类型操作接口,支持元素的添加、查询、删除、分数和排名获取等功能。下面结合实际代码示例,详细介绍常用接口的函数原型和用法。
zadd、zrange
函数原型:
long long zadd(const StringView &key, const StringView &member, double score);
long long zadd(const StringView &key, std::initializer_list<std::pair<StringView, double>> m);
template <typename Input>
long long zadd(const StringView &key, Input first, Input last);
template <typename Output>
void zrange(const StringView &key, long long start, long long stop, Output output);
示例:
// 清空Redis数据库
redis.flushall();
// 方法1: 添加单个元素(成员value1,分数1.0)
redis.zadd("myzset", "value1", 1.0);
// 方法2: 使用initializer_list批量添加元素
redis.zadd("myzset", {
std::make_pair("value2", 2.0),
std::make_pair("value3", 3.0)
});
// 方法3: 使用容器和迭代器批量添加元素
std::vector<std::pair<std::string, double>> values = {
{"value4", 4.0},
{"value5", 5.0}
};
redis.zadd("myzset", values.begin(), values.end());
// 查询有序集合全部元素(带分数)
std::cout << "ZSET contents after zadd:" << std::endl;
std::vector<std::pair<std::string, double>> results;
redis.zrange("myzset", 0, -1, std::back_inserter(results));
for (const auto &res : results) {
std::cout << res.first << ": " << res.second << std::endl;
}
// 只查询成员名(不带分数)
std::vector<std::string> members;
redis.zrange("myzset", 0, -1, std::back_inserter(members));
for (const auto &member : members) {
std::cout << member << std::endl;
}
结果输出:
ZSET contents after zadd:
value1: 1
value2: 2
value3: 3
value4: 4
value5: 5
value1
value2
value3
value4
value5
zcard
函数原型:
long long zcard(const StringView &key);
示例:
// 清空Redis数据库
redis.flushall();
// 添加测试元素
redis.zadd("myzset", "value1", 1.0);
redis.zadd("myzset", {
std::make_pair("value2", 2.0),
std::make_pair("value3", 3.0)
});
// 获取有序集合元素数量
auto zcard = redis.zcard("myzset");
std::cout << "ZSET cardinality: " << zcard << std::endl;
// 获取不存在的有序集合元素数量
auto non_exist_zcard = redis.zcard("non_exist_zset");
std::cout << "Non-existent ZSET cardinality: " << non_exist_zcard << std::endl;
结果输出:
ZSET cardinality: 3
Non-existent ZSET cardinality: 0
zrem
函数原型:
long long zrem(const StringView &key, const StringView &member);
示例:
// 清空Redis数据库
redis.flushall();
// 添加测试元素
redis.zadd("myzset", "value1", 1.0);
redis.zadd("myzset", {
std::make_pair("value2", 2.0),
std::make_pair("value3", 3.0)
});
// 删除指定元素value2
redis.zrem("myzset", "value2");
// 查看删除后的集合内容
std::cout << "ZSET contents after zrem:" << std::endl;
std::vector<std::pair<std::string, double>> results;
redis.zrange("myzset", 0, -1, std::back_inserter(results));
for (const auto &res : results) {
std::cout << res.first << ": " << res.second << std::endl;
}
结果输出:
ZSET contents after zrem:
value1: 1
value3: 3
zscore
函数原型:
OptionalDouble zscore(const StringView &key, const StringView &member);
示例:
// 清空Redis数据库
redis.flushall();
// 添加测试元素
redis.zadd("myzset", "value1", 1.0);
redis.zadd("myzset", {
std::make_pair("value2", 2.0),
std::make_pair("value3", 3.0)
});
// 获取元素分数(返回OptionalDouble)
auto score = redis.zscore("myzset", "value2");
if (score) {
std::cout << "Score of value2: " << score.value() << std::endl;
} else {
std::cout << "value2 not found in ZSET" << std::endl;
}
// 获取不存在的元素分数
auto non_exist_score = redis.zscore("myzset", "value4");
if (!non_exist_score) {
std::cout << "value4 not found in ZSET" << std::endl;
}
结果输出:
Score of value2: 2
value4 not found in ZSET
zrank
函数原型:
OptionalLongLong zrank(const StringView &key, const StringView &member);
示例:
// 清空Redis数据库
redis.flushall();
// 添加测试元素
redis.zadd("myzset", "value1", 1.0);
redis.zadd("myzset", {
std::make_pair("value2", 2.0),
std::make_pair("value3", 3.0)
});
// 获取元素排名(从0开始)
auto rank = redis.zrank("myzset", "value2");
if (rank) {
std::cout << "Rank of value2: " << rank.value() << std::endl;
} else {
std::cout << "value2 not found in ZSET" << std::endl;
}
// 获取不存在的元素排名
auto non_exist_rank = redis.zrank("myzset", "value4");
if (!non_exist_rank) {
std::cout << "value4 not found in ZSET" << std::endl;
}
结果输出:
Rank of value2: 1
value4 not found in ZSET
通过这些接口,C++ 后端可以高效地操作 Redis 的 ZSet(有序集合)类型数据结构,支持元素的增删查、分数和排名获取等多种业务场
查看评论