一、概述

有序集合 也是一个集合,和集合 的不同之处在于有序集合是有序的 ,它通过给集合中每一个元素都关联一个分数,使得我们可以通过分数来获取一定范围内的元素。

二、命令

2.1 增加和删除元素

  • ZADD key score member [score member ...]:添加元素,当key不存在时创建。分数支持整数和双精度浮点数,可以使用+inf-inf分别表示正无穷大和负无穷大,成功返回添加的元素个数。
  • ZREM key member [member ...]:移除元素,返回成功移除的个数。
127.0.0.1:6379> zadd k 1 maqian 2 xiaoming 3 xiaobai
(integer) 3
127.0.0.1:6379> zrem k xiaobai
(integer) 1
127.0.0.1:6379> zadd k +inf a
(integer) 1
127.0.0.1:6379> zadd k -inf b
(integer) 1

2.2 获取元素

  • ZCARD key:获取集合中的元素个数。
127.0.0.1:6379> zcard k
(integer) 4
  • ZSCORE key member:获取某个元素的分数。
  • ZRANK key member:获取正序元素的排名,排名从0开始。
  • ZREVRANK key member:获取逆序排名。
127.0.0.1:6379> zscore k a
"inf"
127.0.0.1:6379> zscore k b
"-inf"
127.0.0.1:6379> zscore k maqian
"1"
127.0.0.1:6379> zscore k xiaoming
"2"
127.0.0.1:6379> zrank k maqian
(integer) 2
127.0.0.1:6379> zrevrank k maqian
(integer) 1
  • ZRANGE key start stop [WITHSCORES]:根据分数大小从小到大返回索引从[start, stop]之间的元素。默认只返回元素名,如果需要同时返回分数需要带上WITHSCORES参数。如果两个元素分数相同,会根据元素名的字典序排序。
  • ZREVRANGE key start stop [WITHSCORES]:和ZRANGE命令用法一致,只是排序是根据分数从大到小排序,也就是逆序排序。
127.0.0.1:6379> zrange k 0 -1
1) "b"
2) "maqian"
3) "xiaoming"
4) "a"
127.0.0.1:6379> zrange k 0 -1 withscores  # 带分数排序
1) "b"
2) "-inf"
3) "maqian"
4) "1"
5) "xiaoming"
6) "2"
7) "a"
8) "inf"
127.0.0.1:6379> zrevrange k 0 -1 withscores  # 逆序
1) "a"
2) "inf"
3) "xiaoming"
4) "2"
5) "maqian"
6) "1"
7) "b"
8) "-inf"
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:获取分数范围在minmax之间的元素,LIMIT offset count和SQL中的limit一样,从偏移量offset开始获取count个元素。如果不想包括边界值可以在值前面加一个(,例如(min (max表示查询分数范围在(min, max)范围内的元素。
  • ZCOUNT key min max:获取指定分数范围内的元素个数。
127.0.0.1:6379> zrangebyscore k 1 2 withscores
1) "maqian"
2) "1"
3) "xiaoming"
4) "2"
127.0.0.1:6379> zrangebyscore k (1 2 withscores  # 不包括边界1
1) "xiaoming"
2) "2"
127.0.0.1:6379> zrangebyscore k 0 inf withscores limit 1 2  # 先排序,然后从偏移量1开始取前面两个
1) "xiaoming"
2) "2"
3) "a"
4) "inf"
127.0.0.1:6379> zcount k 0 10
(integer) 2

2.3 增加分数

  • ZINCRBY key increment member:给member成员增加分数increment,返回值是更改后的分数。
127.0.0.1:6379> zincrby k 10 maqian
"11"

2.4 根据条件删除元素

  • ZREMRANGEBYRANK key start end:删除排名范围在[start, end]之间的元素,返回成功删除的元素个数。
127.0.0.1:6379> zremrangebyrank k 0 1
(integer) 2
127.0.0.1:6379> zrange k 0 -1
1) "maqian"
2) "a"
  • ZREMRANGEBYSCORE key min max:删除分数范围在[min, max]之间的元素。
127.0.0.1:6379> zadd k 10 a 20 b 30 c 40 d 50 e
(integer) 4
127.0.0.1:6379> zrange k 0 -1 withscores
 1) "a"
 2) "10"
 3) "maqian"
 4) "11"
 5) "b"
 6) "20"
 7) "c"
 8) "30"
 9) "d"
10) "40"
11) "e"
12) "50"
127.0.0.1:6379> zremrangebyscore k 20 (50  # 删除[20, 50)区间的元素
(integer) 3
127.0.0.1:6379> zrange k 0 -1 withscores
1) "a"
2) "10"
3) "maqian"
4) "11"
5) "e"
6) "50"
最后修改:2017 年 11 月 26 日 07 : 45 PM