Redis(16)Redis的有序集合(Sorted Set)类型有哪些常用命令?

150 阅读5分钟

Redis 的有序集合(Sorted Set)类型是一个带有分数的无序集合,分数用于排序。每个元素都是唯一的,但分数可以重复。Sorted Set 类型支持一系列常用命令,下面详细介绍这些命令,并结合代码示例进行展示。

1. ZADD - 向有序集合添加一个或多个成员,并设置分数

ZADD 命令用于向有序集合添加一个或多个成员,并设置分数。如果成员已存在,则更新其分数。

ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

示例:

ZADD myzset 1 "one"
ZADD myzset 2 "two"

2. ZREM - 移除有序集合中的一个或多个成员

ZREM 命令用于移除有序集合中的一个或多个成员。

ZREM key member [member ...]

示例:

ZREM myzset "two"

3. ZSCORE - 获取有序集合中成员的分数

ZSCORE 命令用于获取有序集合中成员的分数。

ZSCORE key member

示例:

ZSCORE myzset "one"

4. ZRANK - 获取有序集合中成员的排名(按分数从低到高)

ZRANK 命令用于获取有序集合中成员的排名(按分数从低到高),排名从 0 开始。

ZRANK key member

示例:

ZRANK myzset "one"

5. ZREVRANK - 获取有序集合中成员的排名(按分数从高到低)

ZREVRANK 命令用于获取有序集合中成员的排名(按分数从高到低),排名从 0 开始。

ZREVRANK key member

示例:

ZREVRANK myzset "one"

6. ZRANGE - 按排名范围获取有序集合中的成员(从低到高)

ZRANGE 命令用于按排名范围获取有序集合中的成员(从低到高)。

ZRANGE key start stop [WITHSCORES]

示例:

ZRANGE myzset 0 -1  # 获取所有成员
ZRANGE myzset 0 -1 WITHSCORES  # 获取所有成员及其分数

7. ZREVRANGE - 按排名范围获取有序集合中的成员(从高到低)

ZREVRANGE 命令用于按排名范围获取有序集合中的成员(从高到低)。

ZREVRANGE key start stop [WITHSCORES]

示例:

ZREVRANGE myzset 0 -1  # 获取所有成员
ZREVRANGE myzset 0 -1 WITHSCORES  # 获取所有成员及其分数

8. ZRANGEBYSCORE - 按分数范围获取有序集合中的成员

ZRANGEBYSCORE 命令用于按分数范围获取有序集合中的成员。

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

示例:

ZRANGEBYSCORE myzset 0 2  # 获取分数在0到2之间的成员
ZRANGEBYSCORE myzset 0 2 WITHSCORES  # 获取分数在0到2之间的成员及其分数
ZRANGEBYSCORE myzset 0 2 LIMIT 0 1  # 获取分数在0到2之间的第一个成员

9. ZREVRANGEBYSCORE - 按分数范围倒序获取有序集合中的成员

ZREVRANGEBYSCORE 命令用于按分数范围倒序获取有序集合中的成员。

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

示例:

ZREVRANGEBYSCORE myzset 2 0  # 获取分数在2到0之间的成员
ZREVRANGEBYSCORE myzset 2 0 WITHSCORES  # 获取分数在2到0之间的成员及其分数
ZREVRANGEBYSCORE myzset 2 0 LIMIT 0 1  # 获取分数在2到0之间的第一个成员

10. ZREM - 移除有序集合中的一个或多个成员

ZREM 命令用于移除有序集合中的一个或多个成员。

ZREM key member [member ...]

示例:

ZREM myzset "one"

11. ZREMRANGEBYRANK - 移除有序集合中指定排名范围的成员

ZREMRANGEBYRANK 命令用于移除有序集合中指定排名范围的成员。

ZREMRANGEBYRANK key start stop

示例:

ZREMRANGEBYRANK myzset 0 1  # 移除排名在0到1之间的成员

12. ZREMRANGEBYSCORE - 移除有序集合中指定分数范围的成员

ZREMRANGEBYSCORE 命令用于移除有序集合中指定分数范围的成员。

ZREMRANGEBYSCORE key min max

示例:

ZREMRANGEBYSCORE myzset 0 1  # 移除分数在0到1之间的成员

13. ZINCRBY - 增加有序集合中某个成员的分数

ZINCRBY 命令用于增加有序集合中某个成员的分数。

ZINCRBY key increment member

示例:

ZINCRBY myzset 2 "one"  # 增加 "one" 的分数2

14. ZINTERSTORE - 计算给定的一个或多个有序集的交集, 并将其储存到新的集合中

ZINTERSTORE 命令用于计算给定的一个或多个有序集的交集,并将其储存到新的集合中。

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

示例:

ZADD zset1 1 "one"
ZADD zset1 2 "two"
ZADD zset2 1 "one"
ZADD zset2 2 "two"
ZINTERSTORE out 2 zset1 zset2
ZRANGE out 0 -1 WITHSCORES

15. ZUNIONSTORE - 计算给定的一个或多个有序集的并集,并将其储存到新的集合中

ZUNIONSTORE 命令用于计算给定的一个或多个有序集的并集,并将其储存到新的集合中。

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

示例:

ZADD zset1 1 "one"
ZADD zset1 2 "two"
ZADD zset2 1 "one"
ZADD zset2 2 "two"
ZUNIONSTORE out 2 zset1 zset2
ZRANGE out 0 -1 WITHSCORES

示例代码

下面是一个完整的示例,展示了如何使用上述常用命令操作 Redis 有序集合类型:

# 启动 Redis CLI
redis-cli

# 向有序集合添加元素
ZADD myzset 1 "one"
ZADD myzset 2 "two"

# 获取有序集合中成员的分数
ZSCORE myzset "one"  # 输出: "1"

# 获取有序集合中成员的排名
ZRANK myzset "one"  # 输出: 0
ZREVRANK myzset "one"  # 输出: 1

# 按排名范围获取有序集合中的成员
ZRANGE myzset 0 -1  # 输出: 1) "one"  2) "two"
ZRANGE myzset 0 -1 WITHSCORES  # 输出: 1) "one"  2) "1"  3) "two"  4) "2"

# 按分数范围获取有序集合中的成员
ZRANGEBYSCORE myzset 0 2  # 输出: 1) "one"  2) "two"
ZRANGEBYSCORE myzset 0 2 WITHSCORES  # 输出: 1