Redis教程(六)有序集合(soted set / zset)类型

 

 


1 Redis数据类型

Redis的键值可以支持数据类型:字符串,列表,散表,集合,有序集合、HyperLogLog,通过选用不同的数据结构,用户可以使用Redis解决各式各样的问题。

redis创建set集合 redis的set集合命令_Redis

1.1 有序集合(soted set / zset)类型

     有序集合和集合一样,都可以包含任意数量的、各不相同的元素( element),不同于集合的是,有序集合的每个元素都关联着一个浮点数格式的分值(score),并且有序集合会按照分值,以从小到大的顺序来排列有序集合中的各个元素。

     虽然有序集合中的每个元素都必须是各不相同的,但元素的分值并没有这一限制,换句话来说,两个不同元素的分值可以是相同的。

1、ZADD命令:按照给定的分值和元素,将任意数量的元素添加到有序集合里面,命令的返回值为成功添加的元素数量。

     ZADD locale 9.8 "UnitedStates"

     ZADD locale 9.6 "China"

         ZADD locale 5.2"Australia" 4.3 "Switzerland" 2.5 "Japan" 1.9"Singapore"

redis创建set集合 redis的set集合命令_迭代_02

 

2、ZSCAN命令:返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN命令的游标参数,以此来延续之前的迭代过程。当 SCAN命令的游标参数被设置为 0时,服务器将开始一次新的迭代,而当服务器向用户返回值为 0的游标时,表示迭代已结束。注意:因为分值储存的是浮点数,所以它们是不精确的,这看上去有点奇怪,但并不影响使用。

ZSCAN locale 0

redis创建set集合 redis的set集合命令_Redis_03

 

3、ZSCORE命令:返回有序集合中,指定元素的分值。

ZSCORE locale China

redis创建set集合 redis的set集合命令_redis创建set集合_04

 

4、ZINCRBY命令:为有序集合指定元素的分值加上增量increment,命令返回执行操作之后,元素的分值。没有相应的ZDECRBY命令,但可以通过将 increment设置为负数来减少分值。

ZINCRBY locale 9.0 "Singapore"

ZINCRBY locale -3.0 "Singapore"

 

redis创建set集合 redis的set集合命令_迭代_05

 

5、ZCARD命令:返回有序集合的基数。

ZCARD locale

redis创建set集合 redis的set集合命令_迭代_06

 

6、ZRANK命令:返回指定元素在有序集合中的排名,其中排名按照元素的分值从小到大计算。排名以 0 开始。

     ZSCANlocale 0

         ZRANKlocale "Australia"

         ZRANKlocale "Japan"

         ZRANKlocale "Switzerland"

redis创建set集合 redis的set集合命令_迭代_07

 

7、ZREVRANK命令:返回成员在有序集合中的逆序排名,其中排名按照元素的分值从大到小计算。

ZREVRANK locale "UnitedStates"

redis创建set集合 redis的set集合命令_Redis_08

 

8、ZRANGE命令:返回有序集合在按照分值从小到大排列元素(升序排列)的情况下,索引 start至索引 stop范围之内的所有元素。两个索引都可以是正数或者负数。

ZRANGE locale 0 -1

redis创建set集合 redis的set集合命令_迭代_09


9、ZREVRANGE命令:返回有序集合在按照分值从大到小排列元素(降序排列)的情况下,索引 start至索引 stop范围之内的所有元素。两个索引都可以是正数或者负数。

redis创建set集合 redis的set集合命令_Redis_10

 

10、ZRANGEBYSCORE命令:返回有序集合在按照分值升序排列元素的情况下,分值在 min 和 max范围之内的所有元素。

ZRANGEBYSCORE locale 5.2 7.9

 

redis创建set集合 redis的set集合命令_有序集合_11

 

11、ZREVRANGEBYSCORE命令:返回有序集合在按照分值降序排列元素的情况下,分值在 min 和 max范围之内的所有元素。

ZREVRANGEBYSCORE locale 7.9 5.2

 

redis创建set集合 redis的set集合命令_redis创建set集合_12

 

12、ZCOUNT命令:返回有序集合在升序排列元素的情况下,分值在 min和 max范围内的元素数量。

ZCOUNT locale 0 9

ZCOUNT locale 5 9

redis创建set集合 redis的set集合命令_Redis_13

 

13、ZUNIONSTORE命令:计算交集,O(N*K)+O(M*log(M)), N 为给定有序集合中,基数最小的有序集合的基数, K为给定有序集合的数量, M为结果集的基数。

ZADD programmer  2000 "peter" 3500"jack" 5000 "tom"

ZADD manager  2000 "herry"  3500"mary" 4000 "bom" 6000 "dave"

 #执行的结果集储存到salary,指定key的数量:2,指定集合以空格进行分格,集合 * WEIGHTS对应的值。

ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 2

ZRANGE programmer 0 -1 WITHSCORES

ZRANGE salary 0 -1 WITHSCORES

                    

redis创建set集合 redis的set集合命令_redis创建set集合_14