redis学习计划(六)redis常用数据类型 SortedSet

1.SortedSet简介

redis中的SortedSet就是一个有序集合。在set基础上加入了一个score字段,通过利用score和index来进行相关的排序。

2.SortedSet相关命令

1)

命令:ZADD key score member [[score member] [score member] ...]

时间复杂度:O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量。

命令描述:将一个或多个 member 元素及其 score 值加入到有序集 key 当中。如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。score 值可以是整数值或双精度浮点数。如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。

返回值:被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。

 

(2

 

命令:ZCARD key

 

时间复杂度:O(1)

 

命令描述:返回有序集 key 的基数。

 

返回值:当 key 存在且是有序集类型时,返回有序集的基数。当 key 不存在时,返回 0 。

(3

命令:ZCOUNT key min max

时间复杂度:O(log(N)+M), N 为有序集的基数, M 为值在 min 和 max 之间的元素的数量。

命令描述:返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

返回值:score 值在 min 和 max 之间的成员的数量。

(4

命令:ZINCRBY key increment member

时间复杂度:O(log(N))

命令描述:为有序集 key 的成员 member 的 score 值加上增量 increment 。可以通过传递一个负数值 increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5。当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。当 key 不是有序集类型时,返回一个错误。score 值可以是整数值或双精度浮点数。

返回值:member 成员的新 score 值,以字符串形式表示。

(5

命令:ZSCORE key member

时间复杂度:O(1)

命令描述:返回有序集 key 中,成员 member 的 score 值。如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。

返回值:member 成员的 score 值,以字符串形式表示。

(6

命令:ZRANGE key start stop [WITHSCORES]、ZREVRANGE key start stop [WITHSCORES]

时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。

命令描述:zrange与zrevrange命令基本效果相同,只是排序方式不同,zrange按照score的从小到大排序,zrevrange则反之。返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递增(从小到大)来排序。具有相同 score 值的成员按字典序(lexicographical order )来排列。超出范围的下标并不会引起错误。

返回值:指定区间内,带有 score 值(可选)的有序集成员的列表。

(7

命令:ZRANK key member、ZREVRANK key member

时间复杂度:O(log(N))

命令描述:zrank与zrevrank命令基本效果相同,只是排序方式不同,zrank按照score的从小到大排序,zrevrank则反之。返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值顺序排列。排名以 0 为底,也就是说, score 值最小的成员排名为 0 。

返回值:如果 member 是有序集 key 的成员,返回 member 的排名。如果 member 不是有序集 key 的成员,返回 nil 。

(8

命令:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

时间复杂度:O(log(N)+M), N 为有序集的基数, M 为被结果集的基数。

命令描述:zrangebyscore与zrevrangebyscore命令基本效果相同,只是排序方式不同,zrangebyscore按照score的从小到大排序,zrevrangebyscore则反之。返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。

min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。

默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。

可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。

返回值:指定区间内,带有 score 值(可选)的有序集成员的列表。

(9

命令:ZREM key member [member ...]

时间复杂度:O(M*log(N)), N 为有序集的基数, M 为被成功移除的成员的数量。

命令描述:移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。

返回值:被成功移除的成员的数量,不包括被忽略的成员。

(10

命令:ZREMRANGEBYRANK key start stop

时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。

命令描述:移除有序集 key 中,指定排名(rank)区间内的所有成员。区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

返回值:被移除成员的数量。

(11

命令:ZREMRANGEBYSCORE key min max

时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。

命令描述:移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。自版本2.1.6开始, score 值等于 min 或 max 的成员也可以不包括在内

返回值:被移除成员的数量。

 

简单归纳:

SortedSet的主要操作基本与链表类似,归纳记忆为:

1.zadd zrem zremrangebyrank zramrangebyscore 有序集合的添加与删除操作,删除分为三种方式,单个和按照区间删除。

2.zcard zcount 集合中的元素数量,以及集合区间内的元素数量。

3.zrange zrevrange zrank zrevrank zrangebyscore zrevrangebyscore 按照区间返回数据,rev为降序的方式返回。

SortedSet就是一个有序的集合,实际应用场景中,如果有分页的操作,或者按照区间统计的时候可以使用此数据结构。

 

posted @ 2017-06-23 18:18  kobe_lzq  阅读(626)  评论(0编辑  收藏  举报