菜鸟笔记
提升您的技术认知

Redis 有序集合(sorted set)

阅读 : 55

排序集合

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

例如:

redis 127.0.0.1:6379> ZADD tutorials 1 redis 
(integer) 1 
redis 127.0.0.1:6379> ZADD tutorials 2 mongodb 
(integer) 1 
redis 127.0.0.1:6379> ZADD tutorials 3 mysql 
(integer) 1 
redis 127.0.0.1:6379> ZADD tutorials 3 mysql 
(integer) 0 
redis 127.0.0.1:6379> ZADD tutorials 4 mysql 
(integer) 0 
redis 127.0.0.1:6379> ZRANGE tutorials 0 10 WITHSCORES  
1) "redis" 
2) "1" 
3) "mongodb" 
4) "2" 
5) "mysql" 
6) "4" 

在上面的例子中,命令 ZADD在Redis名为'tutorials'的排序集合中插入了四个值。

排序集合命令

命令 描述
ZADD key score1 member1 [score2 member2] 将一个或多个成员添加到排序集中,或更新其分数(如果已经存在)
ZCARD key 获取排序集中的成员数
ZCOUNT key min max 用给定值内的分数对排序集中的成员进行计数
ZINCRBY key increment member 增加排序集中成员的分数
ZINTERSTORE destination numkeys key [key ...] 与多个排序集相交并将结果排序后的集存储在新键中
ZLEXCOUNT key min max 计算给定词典范围之间的排序集中的成员数
ZRANGE key start stop [WITHSCORES] 按索引返回排序集中的成员范围
ZRANGEBYLEX key min max [LIMIT offset count] 返回按字典顺序排列的排序集中的成员范围
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 按分数返回排序集中的成员范围
ZRANK key member 确定排序集中成员的索引
ZREM key member [member ...] 从排序集中删除一个或多个成员
ZREMRANGEBYLEX key min max 删除给定词典范围之间的排序集中的所有成员
ZREMRANGEBYRANK key start stop 删除给定索引内排序集中的所有成员
ZREMRANGEBYSCORE key min max 在给定分数内删除排序集中的所有成员
ZREVRANGE key start stop [WITHSCORES] 按索引返回排序集中的一组成员,其得分从高到低排序
ZREVRANGEBYSCORE key max min [WITHSCORES] 按分数返回排序集中的成员范围,分数从高到低排序
ZREVRANK key member 确定成员在排序集中的索引,其得分从高到低排序
ZSCORE key member 获取排序集中与给定成员相关的分数
ZUNIONSTORE destination numkeys key [key ...] 添加多个排序集并将结果排序集存储在新键中
ZSCAN key cursor [MATCH pattern] [COUNT count] 增量迭代排序的集合元素和相关分数