一、概述
在redis中,我们可以将Set类型看做没有排序的字符串集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间完成此操作。Set可包含最大数据量是4294967295。和List类型不同的是,Set集合中不允许出现重复的元素,这一点和C++标准库中的Set容器是完全相同的。换句话说,如果多次添加相同的元素,Set中仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还有一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences 即并集、交集和差集。由于这些操作均在服务器端完成,因此效率极高,因此也节省了大量的网络IO开销。
二、相关命令列表
命令原型 时间复杂度+命令描述 返回值
- SADD key member [member ...] O(N) 时间复杂度中N表示操作的成员数量。如果在插入的过程中,参数中有的成员在Set中已经存在,该成员将被忽略,而其他成员仍然会被正常插入。如果执行命令之前,该Set不存在,该命令将会创建一个新的Set,此后再将参数中的成员陆续插入。如果该key的Value不是Set类型,该命令将会返回相关的错误信息。返回值:本次操作实际插入的成员数量。
- SCARD key O(1) 获取Set中成员数量。返回Set中成员数量,如果该key不存在,返回0.
- SISMEMBER key member O(1) 判断参数中指定成员是否已经存在于Key相关联的Set集合中。返回值:1表示已经存在,0表示不存在。
- SMEMBERS key O(N) 时间复杂度N表示Set集合中已经存在的成员数量。用于获取Key关联的Set集合中的所有成员。返回值:Set集合中的所有成员。
- SPOP key O(1) 随机的移除并返回Set中的某一成员。由于Set中元素的布局不受外部控制,因此无法像List那样确定哪个元素位于Set的头部或尾部。返回移除的成员,如果该key并不存在返回nil。
- SREM key member [member ...]