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 withscores1) "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 withscores1) "seven"2) "7"3) "three"4) "4"5) "file"6) "2"7) "one"8) "1"获取全部元素,并附带序号;排序:zrevrange将顺序号按从“大->小”排序>zrevrange myzset 1 -2 withscores1) "three"2) "4"3) "file"4) "2" |
先按顺序号从“小->大”排序然后指定“顺序号区间”获取元素注:by score 按顺序号取元素 | >zrange myzset 0 -1 withscores1) "one"2) "1"3) "file"4) "2"5) "three"6) "4"7) "seven"8) "7">zrangebyscore myzset 4 6 withscores1) "three"2) "4"求顺序号介于4~6区间元素,只有一个“three”符合条件(range默认按序号由小->大排序)>zrangebyscore myzset 4 7 withscores1) "three"2) "4"3) "seven"4) "7"求顺序号介于4~7区间元素,有一个“three”和“seven”符合条件(range默认按序号由小->大排序) |
先按顺序号从“大->小”排序然后指定“顺序号区间”获取元素注:by score 按顺序号取元素 | >zrevrange myzset 0 -1 withscores1) "seven"2) "7"3) "three"4) "4"5) "file"6) "2"7) "one"8) "1">zrevrangebyscore myzset 7 4 withscores1) "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) 1one和three的下标(索引)值分别是3和1 |
返回给定元素对应的顺序号 | >zscore myzset three"4" |
先按顺序号从“小->大”排序,返回给定”顺序号区间“的元素个数 | >zrange myzset 0 -1 withscores1) "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]的元素返回实际被删除的元素个数 |