Redis数据类型之无序集合类型Set
想学习更多Redis相关知识,请点击右侧链接查看Redis学习笔记:点我查看
一、Redis集合类型介绍
Redis集合(Set)中的成员是唯一且无序的,成员(Member)是Redis集合的组成单位,多个成员组成了集合。Redis集合类型在以下场景中使用效率较高:
- 记录当前用户访问网站页面时的IP地址;
- 社交APP中推荐可能认识的人;
- 查看微信朋友圈点赞的朋友;
二、Redis集合类型常用命令
2.1 单个集合操作命令
1. 添加一个或多个成员:
1 |
|
返回结果是成功添加到当前集合成员的个数:
2. 遍历集合中所有的成员:
1 |
|
3. 判断当前成员是否在集合中:
1 |
|
如果当前集合中存在该成员,返回结果是1;如果不存在,返回结果是0:
4. 删除一个或多个成员:
1 |
|
默认返回的是成功删除的成员数量:
5. 获取集合中成员数量:
1 |
|
6. 从集合中随机展现1个或多个成员作为展示(不执行删除操作):
1 |
|
count可以分成如下情况(假设集合的长度是set.length
并且$set.length \geq 1$)
- 如果count没有值,那么随机展示一个成员;
- 如果count在$[1, set.length)$中,那么展示count个成员;
- 如果$count\geq set.length$,那么展示当前集合所有的成员;
- 如果$count<0$,此时随机展示|count|个元素,展示过程中,可能出现成员重复的情况:
以下是SRANDMEMBER的使用演示:
7. 从集合中随机弹出一个或多个成员:
1 |
|
如果不指定count,默认只弹出一个成员;指定count可以弹出多个成员:
2.2 多个集合操作命令
1. 将当前集合中已经存在某个成员赋值给另一个集合:
1 |
|
2. 集合的差集运算($A-B$):
1 |
|
3. 集合的并集运算($A\cup B$):
1 |
|
4. 集合的交集运算($A \cap B$):
1 |
|
三、Redis集合类型的使用事项
1. Redis集合最大可以存储$2^{32}-1$个元素。
2. 大多数和集合相关的命令在执行过程中效率较高。然而,如果集合中几十万几百万的数据时,需要谨慎使用SMEMBERS命令,因为命令在执行过程中的时间复杂度是$O(n)$。为了解决上述问题,可以使用SSCAN命令(后续会讲到)获取到集合中所有成员。
Redis数据类型之无序集合类型Set
https://www.icode504.com/posts/92.html