天空闲话 发表于 2025-2-14 04:30:38

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

一. Redis中的集合(Set)

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

https://i-blog.csdnimg.cn/blog_migrate/44958d27a466a7279dd335e8e5d98e1f.png
https://i-blog.csdnimg.cn/blog_migrate/6086865e9743d6e133c3c9f204063126.png
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查看一下现在剩余的成员数量:
https://i-blog.csdnimg.cn/blog_migrate/e76f5f6e276ef9a4bd0c65b214ddb9cb.png
之前存储了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,分数是测试分数。我们可以根据分数对成绩进行排序,以获得学生的排名。
https://i-blog.csdnimg.cn/blog_migrate/2937f3ab44f7694ffa339ae87f4fa715.png
https://i-blog.csdnimg.cn/blog_migrate/d799494d528c7556a5ff1af6423f2194.png
https://i-blog.csdnimg.cn/blog_migrate/e9ec54c5a2e5ac69fc3f47a0ba329389.png
https://i-blog.csdnimg.cn/blog_migrate/63d5699f174a52600510ddc4825d3034.png
2.1 基本的一些操纵

2.1.1 zadd添加1到多个成员

Redis Zadd下令用于将一个或多个成员元素及其分数添加到有序集。
如果成员已经是有序集的成员,请更新该成员的分数值,然后重新插入成员元素以确保该成员处于正确的位置。
小数可以是整数值或双精度浮点数。
如果有序集密钥不存在,请创建一个空的有序集并执行ZADD操纵。
如果键存在但不是有序集类型,则返回错误。
   注意:在Redis 2.4之前,ZADD一次只能添加一个元素。
我们增长一个z1给其赋值:ff为100分,aa为90分,nn为110分以此为例。
https://i-blog.csdnimg.cn/blog_migrate/894171af1d0eb69f2591a2bbf554658f.png
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
总结

本文详细介绍了Redis中的集合(Set)和有序集合(ZSet)两种数据结构的基本概念和常用操纵。

[*] Redis中的集合(Set):

[*]Set是无序的、成员唯一的集合,实用于需要去重而且不关心元素顺序的场景。
[*]介绍了几个常用下令:smembers(查看集合成员)、scard(返回集合成员数量)、srem(删除指定成员)、smove(移动成员至另一个集合)和sinterstore(存储多个集合的交集到另一个集合)等。
[*]示例操纵展示了怎样管理和操纵集合成员,夸大了Set的无序性以及其成员的唯一性。

[*] Redis中的有序集合(ZSet):

[*]ZSet是基于分数(score)进行排序的集合,实用于需要排序的场景,如排行榜、优先级队列等。
[*]介绍了zadd(添加成员及其分数)、zcount(返回指定分数区间内的成员数量)和zcard(返回集合成员数量)等常用下令。
[*]示例操纵展示了怎样根据分数对元素进行排序,并利用分数区间查询成员数量。

通过本文,读者可以对Redis中的Set和ZSet有一个清晰的理解,把握其常见下令的利用方法,并能够在实际项目中有效地利用这两种数据结构。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 集合(Set)和有序集合(ZSet)的基本利用方法详解【Redis】