Redis数据类型之无序集合类型Set

想学习更多Redis相关知识,请点击右侧链接查看Redis学习笔记:点我查看

一、Redis集合类型介绍

Redis集合(Set)中的成员是唯一且无序的,成员(Member)是Redis集合的组成单位,多个成员组成了集合。Redis集合类型在以下场景中使用效率较高:

  • 记录当前用户访问网站页面时的IP地址;
  • 社交APP中推荐可能认识的人;
  • 查看微信朋友圈点赞的朋友;

二、Redis集合类型常用命令

2.1 单个集合操作命令

1. 添加一个或多个成员:

1
SADD key member [member ...]

返回结果是成功添加到当前集合成员的个数:

2. 遍历集合中所有的成员:

1
SMEMBERS key

3. 判断当前成员是否在集合中:

1
SISMEMBER key member

如果当前集合中存在该成员,返回结果是1;如果不存在,返回结果是0:

4. 删除一个或多个成员:

1
SREM key member [member ...]

默认返回的是成功删除的成员数量:

5. 获取集合中成员数量:

1
SCARD key

6. 从集合中随机展现1个或多个成员作为展示(不执行删除操作):

1
SRANDMEMBER key [count]

count可以分成如下情况(假设集合的长度是set.length并且$set.length \geq 1$)

  • 如果count没有值,那么随机展示一个成员;
  • 如果count在$[1, set.length)$中,那么展示count个成员;
  • 如果$count\geq set.length$,那么展示当前集合所有的成员;
  • 如果$count<0$,此时随机展示|count|个元素,展示过程中,可能出现成员重复的情况:

以下是SRANDMEMBER的使用演示:

7. 从集合中随机弹出一个或多个成员:

1
SPOP key [count]

如果不指定count,默认只弹出一个成员;指定count可以弹出多个成员:

2.2 多个集合操作命令

1. 将当前集合中已经存在某个成员赋值给另一个集合:

1
SMOVE source destination member

2. 集合的差集运算($A-B$):

1
SDIFF key [key ...]

3. 集合的并集运算($A\cup B$):

1
SUNION key [key ...]

4. 集合的交集运算($A \cap B$):

1
SINTER key [key ...]

三、Redis集合类型的使用事项

1. Redis集合最大可以存储$2^{32}-1$个元素。

2. 大多数和集合相关的命令在执行过程中效率较高。然而,如果集合中几十万几百万的数据时,需要谨慎使用SMEMBERS命令,因为命令在执行过程中的时间复杂度是$O(n)$。为了解决上述问题,可以使用SSCAN命令(后续会讲到)获取到集合中所有成员。


Redis数据类型之无序集合类型Set
https://www.icode504.com/posts/92.html
作者
iCode504
发布于
2025年4月13日
许可协议