Redis 有序集合(sorted set)
- Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
- 不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
- 有序集合的成员是唯一的,但分数(score)却可以重复。
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
常用命令
zadd key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数,按照socore的大小排序zrange key start stop [withscores]
返回有序集中,指定成员个数区间内的成员,返回从第start个到stop个成员的有序集合zrevrange key start stop [withscores]
逆序返回有序集中,指定成员个数区间内的成员zrangebyscore keymax min [withscores] [limit]
通过分数返回有序集合指定区间内的成员,返回的是按照指定score区间排序的memberzrevrangebyscore key max min [withscores] [limit]
返回有序集中指定分数区间内的成员,分数从高到低排序zrem key member [member ...]
移除有序集合中的一个或多个成员zcard key
获取有序集合中的个数zcount key
计算有序集合中指定分数区间的成员数量
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd k1 6 v1
(integer) 1
127.0.0.1:6379> zadd k1 5 v2
(integer) 1
127.0.0.1:6379> zadd k1 4 v3
(integer) 1
127.0.0.1:6379> zadd k1 3 v4
(integer) 1
127.0.0.1:6379> zadd k1 2 v5
(integer) 1
127.0.0.1:6379> zadd k1 1 v6
(integer) 1
127.0.0.1:6379> zrange k1 0 -1
1) "v6"
2) "v5"
3) "v4"
4) "v3"
5) "v2"
6) "v1"
127.0.0.1:6379> zrange k1 0 3
1) "v6"
2) "v5"
3) "v4"
4) "v3"
127.0.0.1:6379> zrevrange k1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"
127.0.0.1:6379>
127.0.0.1:6379> zrangebyscore k1 0 6
1) "v6"
2) "v5"
3) "v4"
4) "v3"
5) "v2"
6) "v1"
127.0.0.1:6379> zrangebyscore k1 0 4
1) "v6"
2) "v5"
3) "v4"
4) "v3"
127.0.0.1:6379> zrevrangebyscore k1 +inf -inf
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"
127.0.0.1:6379> zrevrange k1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"
127.0.0.1:6379> zrange k1 0 -1
1) "v6"
2) "v5"
3) "v4"
4) "v3"
5) "v2"
6) "v1"
127.0.0.1:6379> zrem k1 v3
(integer) 1
127.0.0.1:6379> zrange k1 0 -1
1) "v6"
2) "v5"
3) "v4"
4) "v2"
5) "v1"
127.0.0.1:6379> zcard k1
(integer) 5
127.0.0.1:6379> zcount k1 1 4
(integer) 3
127.0.0.1:6379>
结论