和散列存储这键与值之间的映射类似,有序集合也存储这成员与分值之间的映射,并且提供了分值(分值在Redis中以IEEE754双精度浮点数的格式存储)的处理命令,以及根据分值大小有序地获取(fetch)或扫描(scan)成员和分值的命令。
常用命令
命令 | 用例 | 描述 | 注意 |
---|---|---|---|
zadd | zadd key-name score member [score member] | 将元素member和分数score添加到集合中 | 如果不存在则新添加,存在则覆盖 |
zrem | zrem key-name member [member …] | 移除一个或多个元素,返回移除元素的个数 | |
zcard | zcard key-name | 返回存在的元素数量 | |
zincrby | zincrby key-name increment member | 给元素的分值加上整数increment | |
zcount | zcount key-name min max | 返回介于min和max之间元素的数量 | |
zrank | zrank key-name member | 返回元素member的排名 | |
zscore | zscore key-name member | 返回元素member的分值 | |
zrange | zrange key-name start end [withscores] | 返回介于start和stop之间的成员,如果给定了withscores那么会将分值同成员一并返回 | |
zadd
127.0.0.1:6379> zadd zs1 1 a
(integer) 1
127.0.0.1:6379> zadd zs1 2 a
(integer) 0
127.0.0.1:6379> zscore zs1 a
"2"
zcard
127.0.0.1:6379> zcard zs1
(integer) 1
zrange
127.0.0.1:6379> zrange zs1 0 -1
1) "a"
元素和分值一同返回
127.0.0.1:6379> zrange zs1 0 -1 withscores
1) "a"
2) "2"
127.0.0.1:6379> zadd zs1 5 b
(integer) 1
127.0.0.1:6379> zrange zs1 0 -1 withscores
1) "a"
2) "2"
3) "b"
4) "5"
高级命令
命令 | 用例 | 描述 | 注意 |
---|---|---|---|
zrevrank | zrevrank key-name member | 返回元素按从大到小到排名 | |
zrevrange | zrevrange key-name start end [withscores] | 按照从大到小返回介于start和stop之间的成员,如果给定了withscores那么会将分值同成员一并返回 | |
zrangebyscore | zrangebyscore key-name min max [withscore] [limit offset count] | 返回介于min和max之间的元素,可以指定偏移量和查询个数 | |
zrevrangebyscore | zrevrangebyscore key-name min max [withscore] [limit offset count] | 按从大到小返回介于min和max之间的元素,可以指定偏移量和查询个数 | |
zremrangebyrank | zremrangebyrank key-name start stop | 移除排名从start到end之间的元素 | |
zremrangebyscore | zremrangebyscore key-name min max | 移除score从min到max之间的元素 | |
zinterstore | zinterstore dest-key key-count key [key …] | 执行类似于集合的交集运算 | |
zunionstore | zunionstore dest-key key-count key [key …][WEIGHTS weight [weight …]] [AGGREGATE sum |min|max] | 执行类似于集合的并集运算 |
交集和并集说明:
交集: 默认使用的是聚合函数sum
并集: 只要某个元素存在与集合中,那么并集就会被包含到输出有序集合里面,下图展示了使用聚合函数min执行并集运算的过程,min函数在多个输入有序集合都包含同一个成员的情况下,会将最小的哪个分值设置为这个成员在输出有序集合的分值。