一步一步学习Redis——五大数据类型之有序集合(ZSet)的相关命令

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 一步一步学习Redis——五大数据类型之有序集合(ZSet)的相关命令

文章目录:


1.开篇

2.Redis有序集合(ZSet)的相关命令  

2.1 ZADD命令

语法

返回值

2.2 ZRANGE命令

语法

返回值

2.3 ZREVRANGE命令

语法

返回值

2.4 ZRANGEBYLEX命令

语法

返回值

2.5 ZRANGEBYSCORE命令

语法

返回值

2.6 ZREVRANGEBYSCORE命令

语法

返回值

2.7 ZCARD命令

语法

返回值

2.8 ZCOUNT命令

语法

返回值

2.9 ZLEXCOUNT命令

语法

返回值

2.10 ZSCORE命令

语法

返回值

2.11 ZINCRBY命令

语法

返回值

2.12 ZRANK命令

语法

返回值

2.13 ZREVRANK命令 

语法

返回值

2.14 ZREM命令

语法

返回值

2.15 ZREMBYLEX命令

语法

返回值

2.16 ZREMRANGEBYRANK命令

语法

返回值

2.17 ZREMRANGEBYSCORE命令

语法

返回值

2.18 ZUNIONSTORE命令

语法

返回值

2.19 ZINTERSTORE命令

语法

返回值

2.20 ZSCAN命令

语法

返回值

1.开篇


Redis有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

2.Redis有序集合(ZSet)的相关命令  


序号

命令及描述

1

ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数

2

ZCARD key
获取有序集合的成员数

3

ZCOUNT key min max
计算在有序集合中指定区间分数的成员数

4

ZINCRBY key increment member
有序集合中对指定成员的分数加上增量 increment

5

ZINTERSTORE destination numkeys key [key...]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination

6

ZLEXCOUNT key min max
在有序集合中计算指定字典区间内成员数量

7

ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合指定区间内的成员

8

ZRANGEBYLEX key min max [LIMIT offset count]
通过字典区间返回有序集合的成员

9

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通过分数返回有序集合指定区间内的成员

10

ZRANK key member
返回有序集合中指定成员的索引

11

ZREM key member [member...]
移除有序集合中的一个或多个成员

12

ZREMRANGEBYLEX key min max
移除有序集合中给定的字典区间的所有成员

13

ZREMRANGEBYRANK key start stop
移除有序集合中给定的排名区间的所有成员

14

ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员

15

ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定区间内的成员,通过索引,分数从高到低

16

ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分数区间内的成员,分数从高到低排序

17

ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

18

ZSCORE key member
返回有序集中,成员的分数值

19

ZUNIONSTORE destination numkeys key [key...]
计算给定的一个或多个有序集的并集,并存储在新的 key

20

ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成员和元素分值)


2.1 ZADD命令

Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。

如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。

分数值可以是整数值或双精度浮点数。

如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。

key 存在但不是有序集类型时,返回一个错误。

注意:  Redis 2.4 版本以前, ZADD 每次只能添加一个元素。

语法

redis 127.0.0.1:6379> ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN

返回值

被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。


2.2 ZRANGE命令

Redis Zrange 返回有序集中,指定区间内的成员。

其中成员的位置按分数值递增(从小到大)来排序。

具有相同分数值的成员按字典序(lexicographical order )来排列。

下标参数 start stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。

你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

语法

redis 127.0.0.1:6379> ZRANGE key start stop [WITHSCORES]

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

2.3 ZREVRANGE命令

Redis Zrevrange 命令返回有序集中,指定区间内的成员。

其中成员的位置按分数值递减(从大到小)来排列。

具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。

语法

redis 127.0.0.1:6379> ZREVRANGE key start stop [WITHSCORES]

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。


2.4 ZRANGEBYLEX命令

Redis Zrangebylex 通过字典区间返回有序集合的成员。

语法

redis 127.0.0.1:6379> ZRANGEBYLEX key min max [LIMIT offset count]

返回值

指定区间内的元素列表。


2.5 ZRANGEBYSCORE命令

Redis Zrangebyscore 返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。

具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)

默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)

举个例子:

ZRANGEBYSCORE zset (1 5

返回所有符合条件 1 < score <= 5 的成员,而

ZRANGEBYSCORE zset (5 (10

则返回所有符合条件 5 < score < 10 的成员。

语法

redis 127.0.0.1:6379> ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

2.6 ZREVRANGEBYSCORE命令

Redis Zrevrangebyscore 返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。

具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列。

语法

redis 127.0.0.1:6379> ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

返回值

指定区间内,带有分数值(可选)的有序集成员的列表。

2.7 ZCARD命令

Redis Zcard 命令用于计算集合中元素的数量。

语法

redis 127.0.0.1:6379> ZCARD KEY_NAME

返回值

key 存在且是有序集类型时,返回有序集的基数。 key 不存在时,返回 0

2.8 ZCOUNT命令

Redis Zcount 命令用于计算有序集合中指定分数区间的成员数量。

语法

redis 127.0.0.1:6379> ZCOUNT key min max

返回值

分数值在 min max 之间的成员的数量。

2.9 ZLEXCOUNT命令

Redis Zlexcount 命令在计算有序集合中指定字典区间内成员数量。

语法

redis 127.0.0.1:6379> ZLEXCOUNT KEY MIN MAX

返回值

指定区间内的成员数量。

2.10 ZSCORE命令

Redis Zscore 命令返回有序集中,成员的分数值。如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil

语法

redis 127.0.0.1:6379> ZSCORE key member

返回值

成员的分数值,以字符串形式表示。

2.11 ZINCRBY命令

Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment

可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member score 值减去 5

key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member

key 不是有序集类型时,返回一个错误。

分数值可以是整数值或双精度浮点数。

语法

redis 127.0.0.1:6379> ZINCRBY key increment member

返回值

member成员的新分数值,以字符串形式表示。

2.12 ZRANK命令

Redis Zrank 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。

语法

redis 127.0.0.1:6379> ZRANK key member

返回值

如果成员是有序集 key 的成员,返回 member 的排名。如果成员不是有序集 key 的成员,返回 nil


2.13 ZREVRANK命令 

Redis Zrevrank 命令返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。

排名以 0 为底,也就是说,分数值最大的成员排名为 0

使用 ZRANK 命令可以获得成员按分数值递增(从小到大)排列的排名。

语法

redis 127.0.0.1:6379> ZREVRANK key member

返回值

如果成员是有序集 key 的成员,返回成员的排名。如果成员不是有序集 key 的成员,返回 nil

2.14 ZREM命令

Redis Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。

key 存在但不是有序集类型时,返回一个错误。

语法

redis 127.0.0.1:6379> ZREM key member [member ...]

返回值

被成功移除的成员的数量,不包括被忽略的成员。

2.15 ZREMBYLEX命令

Redis Zremrangebylex 命令用于移除有序集合中给定的字典区间的所有成员。

语法

redis 127.0.0.1:6379> ZREMRANGEBYLEX key min max

返回值

被成功移除的成员的数量,不包括被忽略的成员。

2.16 ZREMRANGEBYRANK命令

Redis Zremrangebyrank 命令用于移除有序集中,指定排名(rank)区间内的所有成员。

语法

redis 127.0.0.1:6379> ZREMRANGEBYRANK key start stop

返回值

被移除成员的数量。

2.17 ZREMRANGEBYSCORE命令

Redis Zremrangebyscore 命令用于移除有序集中,指定分数(score)区间内的所有成员。

语法

redis 127.0.0.1:6379> ZREMRANGEBYSCORE key min max

返回值

被移除成员的数量。

2.18 ZUNIONSTORE命令

Redis Zunionstore 命令计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和

WEIGHTS选项,与前面设定的可以对应,对应key中每一个score都要乘以这个权重

AGGREGATE选项,指定并集结果的聚合方式

SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score

MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score

MAX:将所有集合中某一个元素score值中最大值作为结果集中该成员的score

语法

redis 127.0.0.1:6379> ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

返回值

保存到 destination 的结果集的成员数量。

2.19 ZINTERSTORE命令

Redis Zinterstore 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination

默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

WEIGHTS选项,与前面设定的可以对应,对应key中每一个score都要乘以这个权重

AGGREGATE选项,指定并集结果的聚合方式

SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score

MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score

MAX:将所有集合中某一个元素score值中最大值作为结果集中该成员的score

语法

redis 127.0.0.1:6379> ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

返回值

保存到目标结果集的的成员数量。

2.20 ZSCAN命令

Redis Zscan 命令用于迭代有序集合中的元素(包括元素成员和元素分值)

语法

redis 127.0.0.1:6379> ZSCAN key cursor [MATCH pattern] [COUNT count]

·       cursor - 游标。

·       pattern - 匹配的模式。

·       count - 指定从数据集里返回多少元素,默认值为 10

返回值

返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
15天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
31 1
|
1月前
|
存储 消息中间件 NoSQL
Redis 数据类型
10月更文挑战第15天
37 1
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
251 3
|
18天前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
32 0
|
1月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
31 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
26天前
|
存储 NoSQL 关系型数据库
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
|
26天前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
1月前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
28 0
下一篇
无影云桌面