Redis系列(六)、数据类型之有序集合ZSet(sorted_set)

目录

介绍

命令行模式

交集

并集

应用场景


Redis支持五种数据类型:String, Hash, List, Set, ZSet,这个系列介绍一下如何使用这些数据类型,本篇介绍使用命令行模式以及python客户端对redis进行操作,实际项目的过程中也大多是一模一样的用法。

相关内容:

Redis系列(一)、CentOS7下安装Redis6.0.3稳定版

Redis系列(二)、数据类型之字符串String 

Redis系列(三)、数据类型之哈希Hash

Redis系列(四)、数据类型之列表List

Redis系列(五)、数据类型之无序集合Set

------------------------Redis有序集合类型----------------------

介绍

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。

命令行模式

进入命令行模式:

redis-cli -a password_value
 
redis-cli -a password_value --raw
--raw 避免中文显示乱码

help

使用下面的命令查看手册:

help @sorted_set

 

zadd

往有序集合中新增成员,需要指定该成员的分数,分数可以是整形或浮点型,当分数相同时候,索引下标按照字典排序:

ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

zcard

获取有序集合的成员数:

ZCARD key

 

zcount

从有序集合内获取指定分数区间内的成员数:

ZCOUNT key min max

 

zlexcount

根据字典排序返回min ,max之间的数据量,具体lex的介绍请参考下面的ZRANGEBYLEX部分:

ZLEXCOUNT key min max

zscore

返回有序集中,成员的分数值,不存在的成员返回空:

ZSCORE key member

 

zscan

用于迭代有序集合中的元素(包括元素成员和元素分值)并将匹配到的值返回:

ZSCAN key cursor [MATCH pattern] [COUNT count]

 

zrange

根据下标查看集合内所有成员(及分数),[start,stop]:

ZRANGE key start stop [WITHSCORES]

 

zrangebylex

 通过字典区间返回有序集合的成员:

min:字典中排序位置较小的成员,必须以"[" 或者以"("开头,可使用"-"代替, "["代表闭区间,"("代表开区间

max:字典中排序位置较大的成员,必须以"[" 或者以"("开头,可使用"+"代替, "["代表闭区间,"("代表开区间

不要在分数不一致的SortSet集合中去使用 ZRANGEBYLEX 指令,因为获取的结果并不准确。

limit offset count: 分片查询,limit为关键字,offset表示从结果集的哪个下标开始分片,count表示分片的数据量。

ZRANGEBYLEX key min max [LIMIT offset count]

 

zrangebyscore

 根据分数查看集合内所有成员(及分数),[start,stop]:

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

 

zrank

返回有序集合中指定成员的索引(下标):

ZRANK key member

 

zrevrange

与zrange功能类似,不同的是zrevrange会将集合先反序[reverse]之后再执行zrange返回:

ZREVRANGE key start stop [WITHSCORES]

 

zrevrangebylex

结合zrangebylex和zrevrange功能。反序通过字典区间返回有序集合的成员:

ZREVRANGEBYLEX key max min [LIMIT offset count]

zrevrangebyscore

结合zrangebyscore和zrevrange功能。反序通过分数区间返回有序集合的成员:

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

zrevrank

结合zrank和zrevrange功能。反序返回有序集合中指定成员的索引(下标):

ZREVRANK key member

zpopmax

redis5版本之后的新功能。从集合中弹出分数最高的成员,返回该成员和分值,然后从集合中将其移出:

ZPOPMAX key [count]

 

zpopmin

redis5版本之后的新功能。与zpopmax相反,从集合中弹出分数最低的成员,返回该成员和分值,然后从集合中将其移出:

ZPOPMIN key [count]

 

bzpopmax

redis5版本之后的新功能。在参数中的所有有序集合均为空的情况下,阻塞连接。参数中包含多个有序集合时,按照参数中key的顺序,返回第一个非空key中分数最大的成员和对应的分数。参数 timeout 可以理解为客户端被阻塞的最大秒数值,0 表示永久阻塞。

BZPOPMAX key [key ...] timeout

 

bzpopmin

 redis5版本之后的新功能。与bzpopmax相反。在参数中的所有有序集合均为空的情况下,阻塞连接。参数中包含多个有序集合时,按照参数中key的顺序,返回第一个非空key中分数最小的成员和对应的分数。参数 timeout 可以理解为客户端被阻塞的最大秒数值,0 表示永久阻塞。

BZPOPMIN key [key ...] timeout

 

zrem

从集合中移除指定的成员:

ZREM key member [member ...]

zremrangebylex

结合zrem和zrangebylex功能:将zrangebylex匹配的结果从有序集合中删除:

ZREMRANGEBYLEX key min max

zremrangebyrank

结合zrem和zrank功能:将zrank匹配的结果从有序集合中删除:

ZREMRANGEBYRANK key start stop

zremrangebyscore

结合zrem和zrangebyscore功能:将zrangebyscore匹配的结果从有序集合中删除:

ZREMRANGEBYSCORE key min max

zincrby

修改有序集合内成员的分数,将有序集合内成员的分数增加increment分值,increment可以为浮点型整型也可以为负数或正数:

ZINCRBY key increment member

交集

zinterstore

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中,给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination ,默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和,可以使用aggregate参数指定将相同成员的分数取最小值或最大值:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

 

并集

zunionstore

计算给定的一个或多个有序集的并集,并存储在新的 key 中:

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

 

应用场景

  1. 点赞排行
  2. 排行榜
  3. 显示分数和信息(如学生分数排名)

Python客户端与命令行函数基本上完全一致,篇幅太长因此不再过多的展示。

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

猜你喜欢

转载自blog.csdn.net/wsdc0521/article/details/106689570