Redis入门第七讲——讲一讲Redis五大数据类型中的set(集合)

女爷i 2023-02-27 10:38 80阅读 0赞

概述

在Redis中,我们可以将set类型看作为没有排序的字符集合,和list类型的存储结构几乎一样,如下图所示。
在这里插入图片描述
和list类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。set可包含的最大元素数量是4294967295

和list类型不同的是,set集合中不允许出现重复的元素,这一点和C++标准库中的set容器是完全相同的。换句话说,如果多次添加相同元素,那么set中将仅保留该元素的一份拷贝。和list类型相比,set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。

常用命令

添加/删除元素

sadd key values[value1 value2 ···]

向set中添加数据,若该key的值已有则不会重复添加。
在这里插入图片描述

srem key members[members1 members2 ···]

删除set中指定的成员。例如,
在这里插入图片描述

获得集合中的元素

smembers key

获取set中所有的成员。例如,
在这里插入图片描述

sismember key member

判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在(无论集合中有多少元素都可以极速的返回结果)。
在这里插入图片描述

集合的差集运算(A-B)

sdiff key1 key2 ···

返回key1与key2中相差的成员,而且与key的顺序有关。你还记得初中数学学过的集合之间的运算吗?想必你都懂。其实说白了执行该命令之后返回的是差集,如下图所示。
在这里插入图片描述
知道了该命令执行之后返回的是什么之后,我们来尝试着用一下该命令,如下图所示。
在这里插入图片描述

集合的交集运算(A∩B)

sinter key1 key2 ···

执行该命令之后返回的是交集,如下图所示。
在这里插入图片描述
知道了该命令执行之后返回的是什么之后,我们来尝试着用一下该命令,如下图所示。
在这里插入图片描述

集合的并集运算(A∪B)

sunion key1 key2 ···

执行该命令之后返回的是并集,如下图所示。
在这里插入图片描述
知道了该命令执行之后返回的是什么之后,我们来尝试着用一下该命令,如下图所示。
在这里插入图片描述

其他

scard key

获取set中成员的数量。例如,
在这里插入图片描述

srandmember key

随机返回set中的一个成员。例如,
在这里插入图片描述

sdiffstore destination key1 key2 ···

将key1、key2相差的成员存储在destination上。例如,
在这里插入图片描述

sinterstore destination key1 key2 ···

将返回的交集存储在destination上。例如,
在这里插入图片描述

sunionstore destination key1 key2 ···

将返回的并集存储在destination上。例如,
在这里插入图片描述

使用场景

这里我会讲两个使用场景,它们分别是:

  1. 可以使用Redis的set数据类型跟踪一些唯一性数据,比如访问某一博客的唯一IP地址信息。对于此场景,我们仅需在每次访问该博客时将访问者的IP存入Redis中即可,set数据类型会自动保证IP地址的唯一性;
  2. 充分利用set类型的服务端聚合操作方便、高效的特性,可以用于维护数据对象之间的关联关系。比如所有购买某一电子设备的客户ID被存储在一个指定的set中,而购买另外一种电子产品的客户ID被存储在另外一个set中,如果此时我们想获取有哪些客户同时购买了这两种商品时,set的intersections命令就可以充分发挥它的方便和效率的优势了。

发表评论

表情:
评论列表 (有 0 条评论,80人围观)

还没有评论,来说两句吧...

相关阅读