集合(Set)和有序集合(ZSet)的基本使用方法详解【Redis】

上进小菜猪 发表于 2022/11/20 23:27:48 2022/11/20
【摘要】 一. Redis中的集合(Set)Set是String类型的无序集合。集合成员是唯一的,重复的数据不能出现在集合中。 1.1基本的一些操作 1.1.1 smembers查看集合中的所有成员Redis Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。先添加多个成员:127.0.0.1:6379> sadd s1 a 1 a b 2 3 5(integer)...

一. Redis中的集合(Set)

Set是String类型的无序集合。集合成员是唯一的,重复的数据不能出现在集合中。

1.1基本的一些操作

image-20221104230313551

image-20221104231411838

1.1.1 smembers查看集合中的所有成员

Redis Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。

先添加多个成员:

127.0.0.1:6379> sadd s1 a 1 a b 2 3 5
(integer) 6

使用smembers命令查看,可以看出来是乱序的。

127.0.0.1:6379> smembers s1
1) "2"
2) "a"
3) "1"
4) "5"
5) "b"
6) "3"

1.1.2 scard删除成员数量

Redis Scard 命令返回集合中元素的数量。

使用srem可以删除指定的值。

127.0.0.1:6379> srem s1 a 1
(integer) 2

使用scard查看一下现在剩余的成员数量:
image-20221104231155075

之前存储了6个,删除了俩个,现在只剩下了4个。

1.1.3 smove移动成员

Redis Smove命令将指定的成员元素从源集合移动到目标集合。SMOVE是原子操作。如果源集合不存在或不包含指定的成员元素,则SMOVE命令不执行任何操作,只返回0。否则,将从源集合中删除成员元素并将其添加到目标集合中。当目标集已经包含成员元素时,SMOVE命令只需从源集中删除成员元素。当源或目标不是集合类型时,将返回错误。

使用smove语句将s1里的2移动到s2里面。

127.0.0.1:6379> smove s1 s2 2
(integer) 1

1.1.4 sinterstore 存储俩个集合的交集

Redis Sinterstore 命令将给定集合之间的交集存储在指定的集合中。如果指定的集合已经存在,则将其覆盖。

先使用sadd将s1里面添加5个成员: 0 9 8 7 6

给s2添加5个成员:0 9 4 6 3

我们可以看出,s1和s2的交集是0 9 6 3 :3是因为s1原来里面含有3。

127.0.0.1:6379> sadd s1 0 9 8 7 6
(integer) 5
127.0.0.1:6379> sadd s2 0 9 4 6 3
(integer) 5

我们使用 sinterstore 存储俩个集合的交集:

127.0.0.1:6379> sinterstore s3 s1 s2
(integer) 4

我们使用smembers,显示s3里面的成员值:

127.0.0.1:6379> smembers s3
1) "0"
2) "3"
3) "6"
4) "9"

二.Redis中的有序集合(ZSet)

Zset是Redis提供的最独特的数据类型之一。首先,它是一个集合,这确保了内部值的唯一性。其次,它为每个值添加一个分数属性,通过对分数进行排序来实现排序。例如,zset结构用于存储学生的分数。值表示学生的ID,分数是测试分数。我们可以根据分数对成绩进行排序,以获得学生的排名。

image-20221105115812768

image-20221104232928128

image-20221105114314235

image-20221105115027370

2.1 基本的一些操作

2.1.1 zadd添加1到多个成员

Redis Zadd命令用于将一个或多个成员元素及其分数添加到有序集。
如果成员已经是有序集的成员,请更新该成员的分数值,然后重新插入成员元素以确保该成员处于正确的位置。
小数可以是整数值或双精度浮点数。
如果有序集密钥不存在,请创建一个空的有序集并执行ZADD操作。
如果键存在但不是有序集类型,则返回错误。

注意:在Redis 2.4之前,ZADD一次只能添加一个元素。

我们增加一个z1给其赋值:ff为100分,aa为90分,nn为110分以此为例。

image-20221105114451955

2.1.2 zcount 返回指定分数区间的成员数量

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

127.0.0.1:6379> zcount z1 -inf (110
(integer) 3

2.1.3 zcard 返回指定成员数量

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

127.0.0.1:6379> zcard z1
(integer) 4
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。