Sorted Sets特点:与Sets类似,区别在于元素有序,每个元素都有关联的浮点型分值用于排序,可以根据分值、元素、集合、过滤器、排序的结果集进行查询
命令一览:ZADD、ZRANGE、ZCARD、ZCOUNT、ZRANK、ZREM 、ZSCORE、ZINCRBY、ZREVRANGE 、ZRANGEBYSCORE、ZREMRANGEBYSCORE
命令翻译自Redis,点击跳转:You can try redis command by yourself.Come on !
一、ZADD
1、操作对象:Sorted Sets
2、用法:
理论:ZADD key1 score1 value1 key2 score2 value2 ... keyN scoreN valueN
推荐:ZADD key score value
3、时间复杂度:O(log(N))(N表示Sorted Set中存在的元素个数)
4、作用:向Sorted Set中添加一个带有分值的元素,如果Sorted Set中存在相同分值的元素则会被更新,然后将这个元素重新插入到正确位置保证排序,如果key不存在则会创建一个含有指定元素的Sorted Set,如果key存在但是保存的不是Sorted Set类型就会报错
5、返回值:添加元素成功返回1,分值相同且元素相同则返回0
6、分值可以是双精度、浮点数的字符串表示形式。
举例:
> ZADD hackers 1940 "Alan Kay"
(integer) 1
> ZADD hackers 1965 "Yukihiro Matsumoto"
(integer) 1
> ZADD hackers 1953 "Richard Stallman"
(integer) 1
> ZRANGE hackers 1 2
1) "Alan Kay"
2) "Richard Stallman"
二、ZRANGE
1、操作对象:Sorted Sets
2、用法:ZRANGE key start end [withscores]
3、时间复杂度:O(log(N)) + O(M)(N表示Sorted Set中元素个数,M表示请求的元素个数)
4、作用:返回Sorted Set从最低到最高分值的元素列表,0表示最低且是Sorted Set中的第一个元素
5、返回值:删除多个元素成功,返回移除元素的个数;删除某个元素成功,返回1,删除失败返回0
6、三种情况:
1)start可以从0开始,end为-1表示到Sorted Set末尾元素,为-2表示到Sorted Set倒数第二个元素,依次类推
2)end大于Sorted Set长度,不会有错误,Redis会认为到Sorted Set末尾元素
3)start超出Sorted Set长度或者start>end,返回空的Sorted Set
举例:
> ZRANGE hackers 0 -1
1) "-1"
2) "So Wils"
3) "Soe Wils"
4) "Wilson"
5) "son"
6) "Alan Turing"
7) "Alan Kay"
8) "Richard Stallman"
9) "Sophie Wilson"
10) "Yukihiro Matsumoto"
三、ZCARD
1、操作对象:Sorted Sets
2、用法:ZCARD key
3、时间复杂度:O(1)
4、作用:获取key中元素个数
5、返回值:key存在返回元素个数,key不存在则视为空返回0
举例:
> ZCARD zkey
2
> ZCARD zset
0
四、ZCOUNT
1、操作对象:Sorted Sets
2、用法:ZCOUNT key min max
3、时间复杂度:O(log(N)+M)(N表示Sorted Set中元素个数,M表示min和max间的元素个数)
4、作用:获取Sorted Set中分值在min和max之间的元素的个数
5、返回值:
举例:
> ZCOUNT hackers 1680 1890
0
> ZCOUNT hackers 1580 1900
1
> ZCOUNT hackers 1500 1900
1
> ZCOUNT hackers 1500 1990
6
五、ZRANK
1、操作对象:Sorted Sets
2、用法:ZRANK key member
3、时间复杂度:O(log(N))(N表示合并的Set列表的元素总数)
4、作用:获取member在key中的分值排名,第一个元素排名是0,表示分值最低,依此类推,分值由低到高,排名即由低到高
5、返回值:member的分值在key中的排名名次,如果member不存在Sorted Set中或者key不存在则返回nil
举例:
> ZRANGE hackers 0 -1
1) "-1"
2) "S Wils"
3) "So Wils"
4) "Soe Wils"
5) "Wilson"
6) "son"
7) "Alan Turing"
8) "Alan Kay"
9) "Richard Stallman"
10) "Sophie Wilson"
11) "Yukihiro Matsumoto"
> ZRANK hackers son
5
六、ZREM
1、操作对象:Sorted Sets
2、用法:ZREM key member
3、时间复杂度:O(log(N))(N表示Sorted Set中的元素个数)
4、作用:删除key中的member
5、返回值:删除成功返回1;如果member不存在Sorted Set中则不执行操作返回0;如果key保存的不是Sorted Set则返回错误
举例:
> ZREM hackers son
1
七、ZSCORE
1、操作对象:Sorted Sets
2、用法:ZSCORE key member
3、时间复杂度:O(1)
4、作用:获取key的分值
5、返回值:成功则返回member的分值;如果member不存在Sorted Set中或者key不存在则返回nil
举例:
> zscore hackers Wilson
1457.0
八、ZINCRBY
1、操作对象:Sorted Sets
2、用法:ZINCRBY key increment member
3、时间复杂度:O(log(N))(N表示Sorted Set中的元素个数)
4、作用:如果member存在key中,对其分值增加increment的数值,并对member的增加后得分值排序,如果member不存在key中,则以increment作为分值将member添加到key中;如果key不存在,则会创建一个有increment数值的member的key
5、返回值:成功则返回member的增加increment数值后的分值;如果key保存的不是Sorted Set则返回错误
举例:
> zscore hackers Wilson
1457.0
> ZINCRBY hackers 100 Wilson
1557.0
九、ZREVRANGE
1、操作对象:Sorted Sets
2、用法:ZREVRANGE key start end [WITHSCORES]
3、时间复杂度:O(log(N)) + O(M)(N表示Sorted Set中元素个数,M表示请求的元素个数)
4、作用:获取按照分值由高到低排序后的元素列表,start和end表示元素在key中的位置
5、返回值:按照分值由高到低排序后的元素列表
举例:
> ZREVRANGE hackers 0 -1
1) "Yukihiro Matsumoto"
2) "Sophie Wilson"
3) "Richard Stallman"
4) "Alan Kay"
5) "Alan Turing"
6) "Wilson"
7) "Soe Wils"
8) "So Wils"
9) "S Wils"
10) "-1"
十、ZRANGEBYSCORE
1、操作对象:Sorted Sets
2、用法:
ZRANGEBYSCORE key min max [LIMIT offset count] (Redis >= 1.1)
ZRANGEBYSCORE key min max [LIMIT offset count] [WITHSCORES] (Redis >= 1.3.4)
3、时间复杂度:O(log(N)) + O(M)(N表示Sorted Set中元素个数,M表示命令返回的元素个数)
4、作用:获取分值在min和max间的元素,可以用LIMIT选项限制元素结果列表的个数
5、返回值:分值在min和max间的元素列表
举例:
> ZRANGEBYSCORE hackers 1550 1980
1) "Wilson"
2) "Alan Turing"
3) "Alan Kay"
4) "Richard Stallman"
5) "Sophie Wilson"
6) "Yukihiro Matsumoto"
> ZRANGEBYSCORE hackers 1550 1980 LIMIT offset 3
1) "Wilson"
2) "Alan Turing"
3) "Alan Kay"
十一、ZREMRANGEBYSCORE
1、操作对象:Sorted Sets
2、用法:ZREMRANGEBYSCORE key min max
3、时间复杂度:O(log(N)) + O(M)(N表示Sorted Set中元素个数,M表示命令删除的元素个数)
4、作用:删除分值在min和max间的元素,包含分值为min或max的元素也会被删除
5、返回值:删除元素的个数
举例:
> ZREMRANGEBYSCORE hackers 1690 1890
0
> ZREMRANGEBYSCORE hackers 1690 1990
5