redis命令之-sortedset有序集合

个人笔记:勿详看(详细在线文档http://redisdoc.com/list/index.html)

  1.    sortedset有续集合命令  
zadd
zcard


ZADD key score member [[score member] [score member] ...]

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

score 值可以是整数值或双精度浮点数。

如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

当 key 存在但不是有序集类型时,返回一个错误。



# 添加单个元素

redis> ZADD page_rank 10 google.com
(integer) 1


# 添加多个元素

redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2

redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

zrang
zrevrang(逆序)

ZRANGE key start stop [WITHSCORES]

返回有序集 key 中,指定区间内的成员。

其中成员的位置按 score 值递增(从小到大)来排序。

具有相同 score 值的成员按字典序(lexicographical order )来排列。

如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。

下标参数  start  和  stop  都以  0  为底,也就是说,以  0  表示有序集第一个成员,以  1  表示有序集第二个成员,以此类推。
你也可以使用负数下标,以  -1  表示最后一个成员,  -2  表示倒数第二个成员,以此类推。
超出范围的下标并不会引起错误。
比如说,当  start  的值比有序集的最大下标还要大,或是  start > stop  时,  ZRANGE  命令只是简单地返回一个空列表。
另一方面,假如  stop  参数的值比有序集的最大下标还要大,那么 Redis 将  stop  当作最大下标来处理。
可以通过使用  WITHSCORES  选项,来让成员和它的  score  值一并返回,返回列表以  value1,score1, ..., valueN,scoreN  的格式表示。
客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。

redis > ZRANGE salary 0 -1 WITHSCORES             # 显示整个有序集成员
1) "jack"
2) "3500"
3) "tom"
4) "5000"
5) "boss"
6) "10086"

zcount

ZCOUNT key min max

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


127.0.0.1:6379> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "6"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"
127.0.0.1:6379> zcount page_rank 6 10
(integer) 3
127.0.0.1:6379> zcount page_rank 8 10
(integer) 2

zincrby

ZINCRBY key increment member

为有序集 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 值可以是整数值或双精度浮点数。


127.0.0.1:6379> zincrby page_rank 10 google.com
"20"
127.0.0.1:6379> zscore page_rank google.com
"20"

zscore 查看摸个元素的score值 zscore key value
zrangbyscore

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。

可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。

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

127.0.0.1:6379> zrange salary 0 -1 withscores
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"

127.0.0.1:6379> zrangebyscore salary -inf +inf  withscores
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"

127.0.0.1:6379> zrangebyscore salary -inf 5000  withscores       ---小于5000
1) "jack"
2) "2500"
3) "tom"
4) "5000"
127.0.0.1:6379> zrangebyscore salary 2499 4999  withscores  ---2499到4999之间
1) "jack"
2) "2500"
127.0.0.1:6379> zrangebyscore salary  4999 +inf  withscores   -----大于4999
1) "tom"
2) "5000"
3) "peter"
4) "12000"


zrank

ZRANK key member

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

排名以 0 为底,也就是说, score 值最小的成员排名为 0 。

使用 ZREVRANK 命令可以获得成员按 score 值递减(从大到小)排列的排名。


127.0.0.1:6379> zrank salary peter
(integer) 2
127.0.0.1:6379> zrank salary tom
(integer) 1
127.0.0.1:6379> zrank salary jack
(integer) 0

ZREVRANK
与zrank相反 127.0.0.1:6379> ZREVRANK salary peter
(integer) 0
127.0.0.1:6379> ZREVRANK salary tom
(integer) 1
127.0.0.1:6379> ZREVRANK salary jack
(integer) 2

zrem 移除元素 127.0.0.1:6379> zrem page_rank google.com
(integer) 1

zremrangebyrank

ZREMRANGEBYRANK key start stop

移除有序集 key 中,指定排名(rank)区间内的所有成员。

区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。

下标参数  start  和  stop  都以  0  为底,也就是说,以  0  表示有序集第一个成员,以  1  表示有序集第二个成员,以此类推。
你也可以使用负数下标,以  -1  表示最后一个成员,  -2  表示倒数第二个成员,以此类推。

127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"
127.0.0.1:6379> zremrangebyrank salary 0 1    --删除排名前两名的
(integer) 2
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores
1) "tom"
2) "5000"

zremrangbyscore 和上面的意义一样,异曲同工 127.0.0.1:6379>  zrangebyscore salary -inf +inf withscores
1) "jack"
2) "2000"
3) "peter"
4) "3500"
5) "tom"
6) "5000"
127.0.0.1:6379> zremrangebyscore salary 1500 2500  ---删除1500-2500的
(integer) 1
127.0.0.1:6379>  zrangebyscore salary -inf +inf withscores
1) "peter"
2) "3500"
3) "tom"
4) "5000"

zrevrangebyscore 与zrangebyscore就是逆序 127.0.0.1:6379>  zrevrangebyscore salary  +inf -inf withscores
1) "tom"
2) "5000"
3) "peter"
4) "3500"

zunionstore

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。

WEIGHTS

使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。

如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

AGGREGATE

使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。

默认使用的参数 SUM ,可以将所有集合中某个成员的 score 值之 和 作为结果集中该成员的 score 值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。


127.0.0.1:6379> zrangebyscore manager  -inf +inf withscores
1) "herry"
2) "2000"
3) "mary"
4) "3500"
5) "bob"
6) "4000"
127.0.0.1:6379> zrangebyscore programmer   -inf +inf withscores
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
127.0.0.1:6379> zunionstore newset 2 programmer manager weights 1 3 
(integer) 6   ----1是programmer的乘法因子,3是manager的乘法因子
127.0.0.1:6379> zrange newset 0 -1 withscores
 1) "peter"
 2) "2000"
 3) "jack"
 4) "3500"
 5) "tom"
 6) "5000"
 7) "herry"
 8) "6000"
 9) "mary"
10) "10500"
11) "bob"
12) "12000"

zinterstore
(注意:新的score是集合的和)

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

关于 WEIGHTS 和 AGGREGATE 选项的描述,参见 ZUNIONSTORE 命令。


127.0.0.1:6379> zrange mid_test 0 -1 withscores
1) "Han Meimei"
2) "70"
3) "Li Lei"
4) "70"
5) "Tom"
6) "99.5"
127.0.0.1:6379> zrange fin_test 0 -1 withscores
1) "Han Meimei"
2) "75"
3) "Li Lei"
4) "88"
5) "Tom"
6) "99.5"
127.0.0.1:6379> zinterstore newtest 2 mid_test fin_test 
(integer) 3
127.0.0.1:6379> zrange newtest 0 -1 withscores
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"

ZRANGEBYLEX

ZRANGEBYLEX key min max [LIMIT offset count]

当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。


127.0.0.1:6379> zrange myzset 0 -1 withscores
 1) "a"
 2) "0"
 3) "b"
 4) "0"
 5) "c"
 6) "0"
 7) "d"
 8) "0"
 9) "e"
10) "0"
11) "f"
12) "0"
13) "g"
14) "0"
127.0.0.1:6379> zrangebylex myzset [a  (g
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"

zlexcount

ZLEXCOUNT key min max

对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。

这个命令的 min 参数和 max 参数的意义和 ZRANGEBYLEX 命令的 min 参数和 max 参数的意义一样。


zlexcount myzset [a [g
ZREMRANGEBYLEX

ZREMRANGEBYLEX key min max

对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。

这个命令的 min 参数和 max 参数的意义和 ZRANGEBYLEX 命令的 min 参数和 max 参数的意义一样。


redis> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "alpha"
4) "b"
5) "c"
6) "d"
7) "e"
8) "foo"
9) "zap"
10) "zip"

redis> ZREMRANGEBYLEX myzset [alpha [omega
(integer) 6

redis> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"











未完待续。。。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-1793195/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29096438/viewspace-1793195/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值