1、增加元素(ZADD)
ZADD命令用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。ZADD命令的返回值是新加入到集合中的元素个数(不包含之前已经存在的元素)。
假设我们用有序集合模拟计分板,现在要记录Tom、Peter和David三名运动员的分数(分别是89分、67分和100分):
127.0.0.1:6379> ZADD scoreboard 89 Tom 67 Peter 100 David
(integer) 3
这时,我们发现Peter的分数录入有误,实际的分数应该是76分,可以用ZADD命令修改Peter的分数:
127.0.0.1:6379> ZADD scoreboard 76 Peter
(integer) 0
分数不仅可以是整数,还支持双精度浮点数:
127.0.0.1:6379> ZADD testboard 17E+307 a
(integer) 1
127.0.0.1:6379> ZADD testboard 1.5 b
(integer) 1
127.0.0.1:6379> ZADD testboard +inf c
(integer) 1
127.0.0.1:6379> ZADD testboard -inf d
(integer) 1
2、获得元素的分数(ZSCORE)
127.0.0.1:6379> ZSCORE scoreboard Tom
"89"
3、获得排名在某个范围的元素列表(ZRANGE)
ZRANGE命令会按照元素分数从小从大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)。ZRANGE命令与LRANGE命令十分相似,如索引都是从0开始,负数代表从后向前查找(-1表示最后一个元素)。
127.0.0.1:6379> ZRANGE scoreboard 0 2
1) "Peter"
2) "Tom"
3) "David"
127.0.0.1:6379> ZRANGE scoreboard 1 -1
1) "Tom"
2) "David"
如果需要同时获得元素的分数的话可以在ZRANGE命令的尾数加上WITHSCORES参数,这时返回的数据格式就从“元素1,元素2,...,元素n”变为了“元素1,分数1,元素2,分数2,...,元素n,分数n”。
127.0.0.1:6379> ZRANGE scoreboard 0 -1 WITHSCORES
1) "Peter"
2) "76"
3) "Tom"
4) "89"
5) "David"
6) "100"
4、获得指定分数范围的元素(ZRANGEBYSCORE)
ZRANGEBYSCORE命令参数虽然多,但是都很好理解。该命令按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)的元素。
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 80 100
1) "Tom"
2) "David"
如果希望分数范围不包含断点值,可以在分数前加上“(”符号。例如,希望返回80分到100分的数据,可以含80分,但不包含100分,则稍微修改一下上面的命令即可:
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 80 (100
1) "Tom"
min和max还支持无穷大,同ZADD命令一样,-inf和+inf分别表示负无穷和正无穷。比如你希望得到所有分数高于80分(不包含80分)的人的名单,但你却不知道最高分是多少,这是就可以用上+inf了。
127.0.0.1:6379> ZRANGEBYSCORE scoreboard (80 +inf
1) "Tom"
2) "David"
想获得分数高于60分的从第二个人开始的3个人。
127.0.0.1:6379> ZADD scoreboard 56 Jerry 92 Wendy 67 Yvonne
(integer) 3
127.0.0.1:6379> ZRANGE scoreboard 0 -1 WITHSCORES
1) "Jerry"
2) "56"
3) "Yvonne"
4) "67"
5) "Peter"
6) "76"
7) "Tom"
8) "89"
9) "Wendy"
10) "92"
11) "David"
12) "100"
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 60 +inf LIMIT 1 3
1) "Peter"
2) "Tom"
3) "Wendy"
获得分数低于或等于100分的前3个人。
127.0.0.1:6379> ZREVRANGEBYSCORE scoreboard 100 0 LIMIT 0 3
1) "David"
2) "Wendy"
3) "Tom"
5、增加某个元素的分数(ZINCRBY)
ZINCRBY命令可以增加一个元素的分数,返回值是更改后的分数。例如,想给Jerry加4分:
127.0.0.1:6379> ZINCRBY scoreboard 4 Jerry
"60"
127.0.0.1:6379> ZINCRBY scoreboard -4 Jerry
"56"
6、获得集合中元素的数量(ZCARD)
127.0.0.1:6379> ZCARD scoreboard
(integer) 6
7、获得指定分数范围内的元素个数(ZCOUNT)
127.0.0.1:6379> ZCOUNT scoreboard 90 100
(integer) 2
127.0.0.1:6379> ZCOUNT scoreboard (89 +inf
(integer) 2
8、删除一个或多个元素(ZREM)
127.0.0.1:6379> ZREM scoreboard Wendy
(integer) 1
127.0.0.1:6379> ZCARD scoreboard
(integer) 5
9、按照排名范围删除元素(ZREMRANGEBYRANK)
ZREMRANGEBYRANK命令按照元素分数从小到大的顺序(即索引0表示最小的值)删除处在指定排名范围内的所有元素,并返回删除的元素数量,如:
127.0.0.1:6379> ZADD testRem 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> ZREMRANGEBYRANK testRem 0 2
(integer) 3
127.0.0.1:6379> ZRANGE testRem 0 -1
1) "d"
2) "e"
3) "f"
10、按照分数范围删除元素(ZREMRANGEBYSCORE)
ZREMRANGEBYSCORE命令来删除指定分数范围内的所有元素,参数min和max的特征和ZRANGEBYSCORE命令中的一样。返回值是删除的元素数量。
127.0.0.1:6379> ZREMRANGEBYSCORE testRem (4 5
(integer) 1
127.0.0.1:6379> ZRANGE testRem 0 -1
1) "d"
2) "f"
11、获得元素的排名(ZRANK)
ZRANK命令会按照元素分数从小到大的顺序获得指定的元素的排名(从0开始,即分数最小的元素排名为0)。ZRAVRANK命令则相反。
127.0.0.1:6379> ZRANGE scoreboard 0 -1
1) "Jerry"
2) "Yvonne"
3) "Peter"
4) "Tom"
5) "David"
127.0.0.1:6379> ZRANK scoreboard Peter
(integer) 2
127.0.0.1:6379> ZREVRANK scoreboard Peter
(integer) 2