排序集合
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] | 增量迭代排序的集合元素和相关分数 |