开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情
redis Zset是有序集合,和Set类型一样,它也不允许有重复的元素,每一个元素都会关联一个double类型的分数,Zset正是依据这个double类型的分数来给元素进行排序的;在Zset中元素是唯一的,但是分数是可以重复的;下面来介绍一下Zset常用的一些命令:
ZADD命令
zadd key score1 value1 [score2 value2] ......
示例:
redis> zadd my_zset 9.9 hello
1
zadd命令用来添加元素,并同时给该元素一个score,以便在集合中进行排序;
ZCARD命令
zcard key
示例:
redis> zadd my_zset 9.9 hello
1
redis> zadd my_zset 6.8 world
1
redis> zcard my_zset
2
zcard命令是获取有序集合中的元素的总数;
ZCOUNT命令
zcount key min max
示例:
redis> zcount my_zset 1.5 8.8
1
redis> zcount my_zset 1.5 10.0
2
zcount命令计算在有序集合中,在指定区间分数的元素数量;
ZINCRBY命令
zincrby key step value
示例:
redis> zadd my_zset 6.8 world
1
redis> zincrby my_zset 5.5 world
12.300000000000001
zincrby命令用来给有序集合中指定元素增加分数;该示例中给my_zset有序集合中的world元素增加了5.5分,现在该元素的分数是12.3分,从结果上看,double型分数是会丢失精度的;
ZINTERSTORE命令
zinterstore destination numbers key1 key2 ......
示例:
redis> zadd my_zset 9.9 hello 6.8 world
3
redis> zadd your_zset 6.6 java 7.9 rust 8.9 world
3
redis> zinterstore target_zset 2 my_zset your_zset
1
redis> zrange target_zset 0 -1
0 world
zinterstore命令统计一个或多个有序集合的交集,并将结果集存储到target_zset中,上述示例中,2表示参与比较的的有序集合数量;
ZLEXCOUNT命令
zlexcount key min max
示例:
redis> zadd lex_zset 1 atomic 1 bob 1 charls 1 deal
4
redis> zlexcount lex_zset [bob [charls
2
redis> zlexcount lex_zset [b [charls
2
redis> zlexcount lex_zset [b [charl
1
当所有元素的分数相同时,zlexcount命令用来统计在元素本身排序后,在[min, max]区间范围内的元素数量;示例中的[其实就是区间的表达式,也可以使用(;
ZRANGE命令
zrange key start stop [withscores]
示例:
redis> zrange my_zset 0 -1 withscores
0 hello
1 9.9000000000000004
2 world
3 12.300000000000001
redis> zrange my_zset 0 -1
0 hello
1 world
zrange命令根据索引区间查询出区间内的元素,加上withscores将同时返回元素对应的分数;
ZRANGEBYLEX命令
zrangebylex key min max [limit offset count]
示例:
redis> zrangebylex lex_zset [b [charls
0 bob
1 charls
redis> zrangebylex lex_zset [b [charls limit 0 1
0 bob
zrangebylex命令和zlexcount命令类似,基于所有元素分数相同的情况下,按照元素本身排序后的结果做区间查询,还可以带上limit分页操作;
ZRANGEBYSCORE命令
zrangebyscore key min max [withscores] [limit]
示例:
redis> zrangebyscore my_zset 5 (12.6 withscores
0 hello
1 9.9000000000000004
2 world
3 12.300000000000001
redis> zrangebyscore my_zset 5 (12.6 withscores limit 0 1
0 hello
1 9.9000000000000004
zrangebyscore命令可以根据分数区间来做查询,并可以跟上withscores来决定结果集中要不要显示分数,与limit配合可以做分页处理;
ZRANK命令
zrank key value
示例:
redis> zrank my_zset hello
0
redis> zrank my_zset world
1
zrank命令用来返回指定元素的索引值;
ZREM命令
zrem key value1 value2 ......
示例:
redis> zrem my_zset hello
1
redis> zrange my_zset 0 -1
0 world
zrem命令用来移除有序集合中的一个或多个元素;
ZREMRANGEBYLEX命令
zremrangebylex key min max
示例:
redis> zremrangebylex lex_zset [b [charls
2
redis> zrange lex_zset 0 -1
0 atomic
1 deal
zremrangebylex将根据min~max区间来移除指定元素;
ZREMRANGEBYRANK命令
zremrangebyrank key start stop
示例:
redis> zadd num_zset 1 one 2 two 3 three 4 four 5 five
5
redis> zremrangebyrank num_zset 2 3
2
redis> zrange num_zset 0 -1
0 one
1 two
2 five
zremrangebyrank命令将按照索引区间来删除元素;
ZREMRANGEBYSCORE命令
zremrangebyscore key min max
示例:
redis> zadd score_zset 1.1 one 2.2 two 3.3 three 4.4 four 5.5 five
5
redis> zremrangebyscore score_zset 3 5
2
redis> zrange score_zset 0 -1
0 one
1 two
2 five
zremrangebyscore命令根据分数区间来删除指定元素;
ZREVRANGE命令
zrevrange key start stop [withscores]
示例:
redis> zadd num_zset 1 one 2 two 3 three 4 four 5 five
5
redis> zrevrange num_zset 2 4 withscores
0 three
1 3
2 two
3 2
4 one
5 1
zrevrange命令按照索引倒数,three对应倒数索引2,one对应倒数索引4,分数从高到低返回结果集;
ZREVRANGEBYSCORE命令
zrevrangebyscore key max min [withscores] [limit]
示例:
redis> zrevrangebyscore num_zset 4.5 2.1
0 four
1 three
redis> zrevrangebyscore num_zset 4.5 2.1 withscores
0 four
1 4
2 three
3 3
redis> zrevrangebyscore num_zset 4.5 2.1 withscores limit 0 1
0 four
1 4
zrevrangebyscore命令根据分数范围倒序排列返回查询结果;可以带上withscores和limit参数;
ZREVRANK命令
zrevrank key value
示例:
redis> zrevrank num_zset one
4
redis> zrevrank num_zset five
0
zrevrank命令返回该元素在有序集合中的倒数索引;
ZSCORE命令
zscore key value
示例:
redis> zadd score_zset 1.1 one 2.2 two 3.3 three 4.4 four 5.5 five
5
redis> zscore score_zset five
5.5
zscore命令返回该元素在有序集合中的分数值;
ZUNIONSTORE命令
zunionstore destination numbers key1 key2 ......
示例:
redis> zrange my_zset 0 -1
0 hello
1 world
redis> zrange your_zset 0 -1
0 java
1 rust
2 world
redis> zunionstore union_zset 2 my_zset your_zset
4
redis> zrange union_zset 0 -1
0 hello
1 java
2 rust
3 world
zunionstore命令用来合并一个或多个有序集合,并将结果集存储到指定的union_zset有序集合中;