分享java带来的快乐

我喜欢java新东西

Redis命令——Sorted Set相关

本文主要介绍Redis中与有序集合(Sorted
Set)相关的命令,内容主要来源于Redis的官方网站,如果需要请参考:http://redis.io/commands#sorted_set。



1.ZADD
语法:ZADD key scroe
member
说明:该操作的时间复杂度为O(log(N)),此处N为有序集合中的元素个数。向key对应的有序集合中添加具有指定scroe的元素。如果元素在有序集合中已经存在,那么该元素具有的score将会被更新,并且元素将会被重新插到正确的位值以便确保正确的顺序。如果指定的key不存在,那么将会创建一个具有member这一唯一元素的一个新的有序集合。如果key存在,但是其对应的值不是有序集合,那么将会发生错误。命令中所指定的scroe值应该是能够转换为数字值的字符串,并且接受双精度浮点类型。
返回值:如果元素被添加,返回值为1;如果元素已经是有序集合中的一员并且scroe被更新,那么返回值为0。
该命令自1.1版本后可用。

2.ZCARD
语法:ZCARD
key
说明:该操作的时间复杂度为O(1)。返回存储在key对应的有序集合中的元素的个数。
返回值:返回有序集合中元素的个数,如果key不存在,那么返回值为0。
该命令自1.1版本后可用。

3.ZCOUNT
语法:ZCOUNT
key min
max
说明:该操作的时间复杂度为O(log(N)+M),此处N为元素的个数,而M为min和max间的元素个数。返回key对应的有序集合中介于min和max间的元素的个数。
返回值:返回指定scroe范围内的元素的个数。
该命令自1.3.3版本后可用。

4.ZINCRBY
语法:ZINCRBY
key increment
member
说明:该操作的时间复杂度为O(long(N)),此处N为有序集合中元素的个数。将key对应的有序集合中member元素的scroe加上increment。如果指定的member不存在,那么将会添加该元素,并且其score的初始值为increment。如果key不存在,那么将会创建一个新的有序列表,其中包含member这一唯一的元素。如果key对应的值不是有序列表,那么将会发生错误。指定的score的值应该是能够转换为数字值的字符串,并且接收双精度浮点数。同时,你也可用提供一个负值,这样将减少score的值。
返回值:返回member的新的score的值,表示为字符串。
该命令自1.1版本后可用。

5.ZINTERSTORE
语法:ZINTERSTORE
destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE
SUM|MIN|MAX]
说明:在最坏的情况下,该操作的时间复杂度为O(N*K)+O(M*log(M)),此处N为最小的有序集合,K为有序集合的个数,而M为结果有序集合中元素的个数。计算numkeys个由keys指定的有序集合的交集,并且将结果存储在destination中。在该命令中,在你传递输入keys之前,必须提供输入keys的个数和其它可选的参数。
在默认情况下,一个元素的结果score是具有该元素的所有有序集合的score的和。关于WEIGHTS和AGGREGATE选项,可以参看ZUNIONSTORE命令。如果目标已经存在,那么它将会被重写。
返回值:返回destination有序集合中元素的个数。
该命令自1.3.10版本后可用。

6.ZRANGE
语法:ZRANGE
key start stop
[WITHSCORES]
说明:该操作的时间复杂度为O(log(N)+M),此处N为有序集合中元素的个数,而M为将要返回的元素的个数。返回存储在key上的指定区域内的元素。元素将会按照从低到高的顺序进行排序。而对于具有相同score的元素,将会按照字典顺序进行排序。
当你需要按照从高到低的顺序进行排序元素时,请参考ZREVRANGE命令。在命令中,start和stop索引都是以0开始的,0表示第一个元素,1表示第二个元素,以此类推。它们同样可以是负值,以便从有序集合的尾部指定偏移值,此时,-1表示有序集合中的最后一个元素,-2表示倒数第二个元素,以此类推。超出边界的索引值将会产生错误。如果start超出有序集合的最大的索引值,或者start
>
end,那么将会返回一个空集。如果stop超出有序集合的最大索引,那么会将其当作最后一个元素对待。
同时,可以向该命令传递WITHSCORES选项以便在返回元素时带上其scores信息。此时返回值列表将会是value1,
score1, ... , valueN, scoreN,而非value1, ... ,
valueN。
返回值:返回指定区域内的元素列表。
该命令自1.1版本后可用。

7.ZRANGEBYSCORE
语法:ZRANGEBYSCORE
key min max [WITHSCORES] [limit offset
count]
说明:该操作的时间复杂度为O(log(N)+M),此处N为有序集合中元素的个数,而M为将要返回的元素的个数。如果M为常量,可以认为时间复杂度为O(log(N))。返回key对应的有序集合中score介于min和max之间的所有元素(包哈score等于min或者max的元素)。元素按照score从低到高的顺序排列。如果元素具有相同的score,那么会按照字典顺序排列。
可选的选项LIMIT可以用来获取一定范围内的匹配元素。如果偏移值较大,有序集合需要在获得将要返回的元素之前进行遍历,因此会增加O(N)的时间复杂度。可选的选项WITHSCORES可以使得在返回元素的同时返回元素的score,该选项自从Redis
2.0版本后可用。
排除区间端点和无穷值:
min和max可以是-inf和+inf,因此你能够在不知道score的最大值或最小值的情况下获取一定范围内的所有元素。在默认情况下,由min和max指定的区间是闭区间。同时可以通过在score的前面添加“(”前缀来指定一个开区间(不包括区间端点)。例如:
ZRANGEBYSCORE
zset (1 5
将会返回1 < score <=
5的所有元素。
返回值:指定score区间内的所有元素列表。
该命令自1.050版本后可用。

8.ZRANK
语法:ZRANK
key
member
说明:该操作的时间复杂度为O(log(N))。返回key对应的有序集合中member元素的索引值,元素按照score从低到高进行排列。rank值(或index)是从0开始的,这意味着具有最低score值的元素的rank值为0。使用ZREVRANK可以获得从高到低排列的元素的rank(或index)。
返回值:如果有序集合中存在member,将会返回member的rank值,如果member不存在,或者指定的key不存在,那么返回值为nil。
该命令自1.3.4版本后可用。

9.ZREM
语法:ZREM
key
member
说明:该操作的时间复杂度为O(log(N)),此处N为有序集合中元素的个数。从key对应的有序集合中移除指定的元素。如果member不是有序集合中的元素,那么将不执行任何操作。如果key存在但是其对应的值不是有序集合,那么将会发生错误。
返回值:如果member被移除,那么返回值为1;如果member不是有序集合中的元素,那么返回值为0。
该命令自1.1版本后可用。

10.ZREMRANGEBYRANK
语法:ZREMRANGEBYRANK
key start
stop
说明:该操作的时间复杂度为O(log(N)+M),此处N为有序集合中元素的个数,而M为将要移除的元素的个数。移除key对应的有序集合中rank值介于start和stop之间的所有元素。start和stop均是从0开始的,并且两者均可以是负值。当索引值为负值时,表明偏移值从有序集合中score值最高的元素开始。例如:-1表示具有最高score的元素,而-2表示具有次高score的元素,以此类推。
返回值:返回将要移除的元素的个数。
该命令自1.3.4版本后可用。



11.ZREMRANGEBYSCORE
语法:ZREMRANGEBYSCORE key min
max
说明:该操作的时间复杂度为O(log(N)+M),此处N为有序集合中元素的个数,而M为将要移除的元素的个数。移除key对应的有序集合中scroe位于min和max(包含端点)之间的所哟元素。从2.1.6版本后开始,区间端点min和max可以被排除在外,这和ZRANGEBYSCORE的语法一样。
返回值:返回将要移除的元素个数。
该命令自1.1版本后可用。

12.ZREVRANGE
语法:ZREVRANGE
key start stop
[WITHSCORES]
说明:该操作的时间复杂度为O(log(N)+M),此处N为有序集合中元素的个数,而M为将要返回的元素的个数。返回key对应的有序集合中指定区间的所有元素。这些元素按照score从高到低的顺序进行排列。对于具有相同的score的元素而言,将会按照递减的字典顺序进行排列。该命令与ZRANGE类似,只是该命令中元素的排列顺序与前者不同。
返回值:指定区间内的元素的列表。
该命令自1.1版本后可用。

13.ZREVRANGEBYSCROE
语法:ZREVRANGEBYSCORE
key max min [WITHSCORES] [LIMIT offset
count]
说明:该操作的时间复杂度为O(log(N)+M),此处N为有序集合中元素的个数,M为将要返回的元素的个数。如果M是个常量,那么可以认为时间复杂度为O(log(N))。
返回key对应的有序集合中score介于max和min(包含score等于max或者min的元素)之间的所有元素。该命令按照score从高到低的顺序对元素进行排序。如果两个元素具有相同的score,那么它们将会按照字典顺序进行排列。除去排列顺序的不同,ZREVRANGEBYSCORE命令与ZRANGEBYSCORE命令相同。
返回值:指定score区间内的元素的列表。
该命令自2.1.6版本后可用。

14.ZREVRANK
语法:ZREVRANK
key
member
说明:该操作的时间复杂度为O(log(N))。返回key对应的有序集合中member的索引值,元素按照从高到低的顺序进行排列。rank值(或称为索引值)是从0开始计数的,因此具有最高score值的元素的rank值为0。你可以使用ZRANK命令来获取按照scroe值从低到高顺序排列的元素的rank值。
返回值:如果member在有序集合中存在,那么返回值为member的rank值;如果member不存在或者key不存在,那么返回值为nil。
该命令自1.3.4版本后可用。

15.ZSCORE
语法:ZSCORE
key
member
说明:该命令的时间复杂度为O(1)。返回key对应的有序集合中member的score值。如果member在有序集合中不存在,那么将会返回nil。
返回值:返回member的score值(一个双精度浮点数字),表示为字符串。
该命令自1.1版本后可用。

16.ZUNIONSTORE
语法:ZUNIONSTORE
destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE
SUM|MIN|MAX]
说明:该操作的时间复杂度为O(N)+O(Mlog(M)),此处N为输入有序集合的总大小,M为结果集合中元素的个数。对keys对应的numkeys个有序集合计算合集,并将结果存储在destination中。在传递输入keys之前必须提供输入keys的个数和其它可选参数。在默认情况下,元素的结果score是包含该元素的所有有序集合中score的和。如果使用WEIGHTS选项,你可以对每一个有序集合指定一个操作因子。这意味着每一个有序集合中的每个元素的score在传递给聚合函数之前均会被乘以该因子。当WEIGHTS没有指定时,操作因子默认为1。
使用AGGREGATE选项,你可以指定交集中的结果如何被聚合。该选项默认值为SUM,在这种情况下,一个元素的所有score值均会被相加。当选项被设置为MIN或MAX时,结果集合中将会包含一个元素的最大或者最小的score值。如果destination已经存在,那么它将会被重写。
返回值:目标有序集合中的元素的个数。
该命令自1.3.10版本后可用。

posted on 2012-06-19 12:48 强强 阅读(715) 评论(0)  编辑  收藏 所属分类: Redis


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问