有序集合类型(sorted set),在集合类型的基础上,为集合中的每个元素都关联了一个分数。支持获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。
有序集合类型使用散列表和跳跃表实现的。
命令:
1、有序集合增加元素
ZADD key score member [score member ...]
如果元素已经存在,则修改元素的分数。分数不仅可以是整数,还支持双精度浮点数。+inf和-inf表示正无穷和负无穷
redis>ZADD testboard 17E+307 a
redis>ZADD testboard +inf c
redis>ZADD testboard -inf d
2、获得元素的分数
ZSCORE key member
3、获得排名在某个范围的元素列表
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
ZRANGE命令会按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素。包括两端。-1表示最后一个元素。加上后面的WITHSCORES,返回的结果会跟上元素的分数。ZREVRANGE按照从大到小的顺序返回结果。
4、获得指定分数范围的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offsetcount]
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIToffset count]
如果希望分数范围不包含端点值,可以在分数前加上“(”符号。redis> ZRANGEBYSCORE scoreboard 80(100
5、增加某个元素的分数
ZINCRBY key increment member
6、获得有序集合中元素数量
ZCARD key
7、获得指定分数范围内的元素个数
ZCOUNT key min max
8、删除一个或多个元素
ZREM key member [member ...]
9、按照排名范围删除元素
ZREMRANGEBYRANK key start stop
10、按照分数范围删除元素
ZREMRANGEBYSCORE key min max
11、获得元素排名
ZRANK key member
ZREVRANK key member
12、计算有序集合的交集/并集
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight...]] [AGGREGATE SUM|MIN|MAX]
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTSweight [weight ...]] [AGGREGATE SUM|MIN|MAX]
destination键中元素的分数是由AGGREGATE参数决定的,默认是SUM。SUM是各参与计算的集合中该元素分数的和,MIN是最消息,MAX是最大值。
通过WEIGHTS参数设置每个集合的权重,每个集合在参与计算时元素的分数会被乘上该集合的权重。
redis>ZINTERSTORE result 2 sortedset1 sortedset2 WEIGHTS 1 0.1