Redis教程(六)有序集合(soted set / zset)类型
1 Redis数据类型
Redis的键值可以支持数据类型:字符串,列表,散表,集合,有序集合、HyperLogLog,通过选用不同的数据结构,用户可以使用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"
2、ZSCAN命令:返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN命令的游标参数,以此来延续之前的迭代过程。当 SCAN命令的游标参数被设置为 0时,服务器将开始一次新的迭代,而当服务器向用户返回值为 0的游标时,表示迭代已结束。注意:因为分值储存的是浮点数,所以它们是不精确的,这看上去有点奇怪,但并不影响使用。
ZSCAN locale 0
3、ZSCORE命令:返回有序集合中,指定元素的分值。
ZSCORE locale China
4、ZINCRBY命令:为有序集合指定元素的分值加上增量increment,命令返回执行操作之后,元素的分值。没有相应的ZDECRBY命令,但可以通过将 increment设置为负数来减少分值。
ZINCRBY locale 9.0 "Singapore"
ZINCRBY locale -3.0 "Singapore"
5、ZCARD命令:返回有序集合的基数。
ZCARD locale
6、ZRANK命令:返回指定元素在有序集合中的排名,其中排名按照元素的分值从小到大计算。排名以 0 开始。
ZSCANlocale 0
ZRANKlocale "Australia"
ZRANKlocale "Japan"
ZRANKlocale "Switzerland"
7、ZREVRANK命令:返回成员在有序集合中的逆序排名,其中排名按照元素的分值从大到小计算。
ZREVRANK locale "UnitedStates"
8、ZRANGE命令:返回有序集合在按照分值从小到大排列元素(升序排列)的情况下,索引 start至索引 stop范围之内的所有元素。两个索引都可以是正数或者负数。
ZRANGE locale 0 -1
9、ZREVRANGE命令:返回有序集合在按照分值从大到小排列元素(降序排列)的情况下,索引 start至索引 stop范围之内的所有元素。两个索引都可以是正数或者负数。
10、ZRANGEBYSCORE命令:返回有序集合在按照分值升序排列元素的情况下,分值在 min 和 max范围之内的所有元素。
ZRANGEBYSCORE locale 5.2 7.9
11、ZREVRANGEBYSCORE命令:返回有序集合在按照分值降序排列元素的情况下,分值在 min 和 max范围之内的所有元素。
ZREVRANGEBYSCORE locale 7.9 5.2
12、ZCOUNT命令:返回有序集合在升序排列元素的情况下,分值在 min和 max范围内的元素数量。
ZCOUNT locale 0 9
ZCOUNT locale 5 9
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