Redis 的有序集合(Sorted Set)类型是一个带有分数的无序集合,分数用于排序。每个元素都是唯一的,但分数可以重复。Sorted Set 类型支持一系列常用命令,下面详细介绍这些命令,并结合代码示例进行展示。
1. ZADD - 向有序集合添加一个或多个成员,并设置分数
ZADD
命令用于向有序集合添加一个或多个成员,并设置分数。如果成员已存在,则更新其分数。
bash
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
示例:
bash
ZADD myzset 1 "one"
ZADD myzset 2 "two"
2. ZREM - 移除有序集合中的一个或多个成员
ZREM
命令用于移除有序集合中的一个或多个成员。
bash
ZREM key member [member ...]
示例:
bash
ZREM myzset "two"
3. ZSCORE - 获取有序集合中成员的分数
ZSCORE
命令用于获取有序集合中成员的分数。
bash
ZSCORE key member
示例:
bash
ZSCORE myzset "one"
4. ZRANK - 获取有序集合中成员的排名(按分数从低到高)
ZRANK
命令用于获取有序集合中成员的排名(按分数从低到高),排名从 0 开始。
bash
ZRANK key member
示例:
bash
ZRANK myzset "one"
5. ZREVRANK - 获取有序集合中成员的排名(按分数从高到低)
ZREVRANK
命令用于获取有序集合中成员的排名(按分数从高到低),排名从 0 开始。
bash
ZREVRANK key member
示例:
bash
ZREVRANK myzset "one"
6. ZRANGE - 按排名范围获取有序集合中的成员(从低到高)
ZRANGE
命令用于按排名范围获取有序集合中的成员(从低到高)。
bash
ZRANGE key start stop [WITHSCORES]
示例:
bash
ZRANGE myzset 0 -1 # 获取所有成员
ZRANGE myzset 0 -1 WITHSCORES # 获取所有成员及其分数
7. ZREVRANGE - 按排名范围获取有序集合中的成员(从高到低)
ZREVRANGE
命令用于按排名范围获取有序集合中的成员(从高到低)。
bash
ZREVRANGE key start stop [WITHSCORES]
示例:
bash
ZREVRANGE myzset 0 -1 # 获取所有成员
ZREVRANGE myzset 0 -1 WITHSCORES # 获取所有成员及其分数
8. ZRANGEBYSCORE - 按分数范围获取有序集合中的成员
ZRANGEBYSCORE
命令用于按分数范围获取有序集合中的成员。
bash
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
示例:
bash
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
命令用于按分数范围倒序获取有序集合中的成员。
bash
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
示例:
bash
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
命令用于移除有序集合中的一个或多个成员。
bash
ZREM key member [member ...]
示例:
bash
ZREM myzset "one"
11. ZREMRANGEBYRANK - 移除有序集合中指定排名范围的成员
ZREMRANGEBYRANK
命令用于移除有序集合中指定排名范围的成员。
bash
ZREMRANGEBYRANK key start stop
示例:
bash
ZREMRANGEBYRANK myzset 0 1 # 移除排名在0到1之间的成员
12. ZREMRANGEBYSCORE - 移除有序集合中指定分数范围的成员
ZREMRANGEBYSCORE
命令用于移除有序集合中指定分数范围的成员。
bash
ZREMRANGEBYSCORE key min max
示例:
bash
ZREMRANGEBYSCORE myzset 0 1 # 移除分数在0到1之间的成员
13. ZINCRBY - 增加有序集合中某个成员的分数
ZINCRBY
命令用于增加有序集合中某个成员的分数。
bash
ZINCRBY key increment member
示例:
bash
ZINCRBY myzset 2 "one" # 增加 "one" 的分数2
14. ZINTERSTORE - 计算给定的一个或多个有序集的交集, 并将其储存到新的集合中
ZINTERSTORE
命令用于计算给定的一个或多个有序集的交集,并将其储存到新的集合中。
bash
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
示例:
bash
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
命令用于计算给定的一个或多个有序集的并集,并将其储存到新的集合中。
bash
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
示例:
bash
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 有序集合类型:
bash
# 启动 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