Sorted Set是Set的一个升级版本,它在Set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。


Sorted Set有序集合

添加一个元素

>zadd myzset 1 one

向myzset集合添加一个顺序号为“1”的元素“one”

注: 1.集合中的元素值是唯一的(不允许重复,也没有重复)。

    2.重复添加某元素时,虽返回0,但实际会更新了此元素的顺序号值。

    3.顺序号值允许重复,即同一顺序号值可以对应多个的元素值(多个元素值可以对应同一顺序号)。

使某元素的顺序号自增

>zincrby myzset 1 three  使元素“three”的顺序号值+1

>zincrby myzset 3 three  使元素“three”的顺序号值+3

>zincrby myzset -2 three 使元素“three”的顺序号值-2

注: 1.给正值就自加,给负值就自减;

    2.若给的元素值不存在,则会将其序号值设为0,然后再运算。

返回:返回自增(自减)运算后的结果值



部分获取集合元素


注:range 是通过(下标)索引偏移获取元素

>zrange myzset 0 -1 withscores

1) "one"

2) "1"

3) "file"

4) "2"

5) "three"

6) "4"

7) "seven"

8) "7"

获取全部元素,并附带序号;排序:zrange将顺序号按从“小->大”排序


>zrange myzset 2 -3 withscores

获取下标(索引)从第2个偏移到第-3个偏移的元素

注:第一个偏移从首0计数(需n1>=0),第二个偏移正负均可(首、尾偏移值均为-1);



>zrevrange myzset 0 -1 withscores

1) "seven"

2) "7"

3) "three"

4) "4"

5) "file"

6) "2"

7) "one"

8) "1"

获取全部元素,并附带序号;排序:zrevrange将顺序号按从“大->小”排序


>zrevrange myzset 1 -2 withscores

1) "three"

2) "4"

3) "file"

4) "2"

先按顺序号从“小->大”排序

然后指定“顺序号区间”获取元素


注:by score 按顺序号取元素

>zrange myzset 0 -1 withscores

1) "one"

2) "1"

3) "file"

4) "2"

5) "three"

6) "4"

7) "seven"

8) "7"


>zrangebyscore myzset 4 6 withscores

1) "three"

2) "4"

求顺序号介于4~6区间元素,只有一个“three”符合条件(range默认按序号由小->大排序)


>zrangebyscore myzset 4 7 withscores

1) "three"

2) "4"

3) "seven"

4) "7"

求顺序号介于4~7区间元素,有一个“three”和“seven”符合条件(range默认按序号由小->大排序)

先按顺序号从“大->小”排序

然后指定“顺序号区间”获取元素


注:by score 按顺序号取元素

>zrevrange myzset 0 -1 withscores

1) "seven"

2) "7"

3) "three"

4) "4"

5) "file"

6) "2"

7) "one"

8) "1"


>zrevrangebyscore myzset 7 4 withscores

1) "seven"

2) "7"

3) "three"

4) "4"

求顺序号介于7~4区间元素,有一个“seven”和“three”符合条件(range默认按序号由大->小排序)



先按顺序号从“小->大”排序,

然后获取“指定元素”的下标(索引)值


rank [ræŋk] 次序,顺序

>zrange myzset 0 -1 withscores

1) "one"

2) "1"

3) "file"

4) "2"

5) "three"

6) "4"

7) "seven"

8) "7"

>zrank myzset one     获取元素“one”的下标(索引)值

(integer) 0

>zrank myzset three   获取元素“three”的下标(索引)值

(integer) 2

注:zrank先将集合按顺序号按“小->大”排序,然后取元素在集合中的下标(索引)顺序,类似数组下标从0开始计数,one和three的下标(索引)值分别是0和2,序号值分别是1和4。元素下标(索引)值 同 元素顺序号值是两个概念。

先按顺序号从“大->小”排序,

然后获取“指定元素”的下标(索引)值


rank [ræŋk] 次序,顺序

>zrevrange myzset 0 -1 withscores

1) "seven"

2) "7"

3) "three"

4) "4"

5) "file"

6) "2"

7) "one"

8) "1"

说明:zrevrange将序号score值从大到小排序

>zrevrank myzset one

(integer) 3

>zrevrank myzset three

(integer) 1

one和three的下标(索引)值分别是3和1



返回给定元素对应的顺序号

>zscore myzset three

"4"



先按顺序号从“小->大”排序,

返回给定”顺序号区间“的元素个数

>zrange myzset 0 -1 withscores

1) "one"

2) "1"

3) "file"

4) "2"

5) "three"

6) "4"

7) "seven"

8) "7"


>zcount myzset 2 3

(integer) 1

>zcount myzset 2 4

(integer) 2

>zcount myzset 2 5

(integer) 2

>zcount myzset 2 6

(integer) 2

>zcount myzset 2 7

(integer) 3

获取集合中元素总个数

>zcard myzset

返回集合中的元素总个数;



按元素名称删除元素

>zrem myzset two

从myzset集合中删除指定元素“two”,对应序号被一起删除


>zrem myzset four six

一次删除多个元素


返回实际被删除的元素个数

先按顺序号从“小->大”排序,

按索引(下标)区间删除元素

>zremrangebyrank myzset 1 1

删除索引(下标)区间在[1,1]的元素,即删除下标为1的元素


>zremrangebyrank myzset 2 4

删除索引(下标)区间在[2,4]的元素


返回实际被删除的元素个数

先按顺序号从“小->大”排序,

按顺序号区间删除元素

>zremrangebyscore myzset 2 2

(integer) 1

删除顺序号区间在[2,2]的元素,即:删除顺序号为2的元素。


>zremrangebyscore myzset 2 4

删除顺序号区间在[2,4]的元素


返回实际被删除的元素个数