前言
Set,即集合,与数学中的集合概念一致,不过Redis Set中包含的元素类型是string。Set中元素值是唯一的,不能出现重复的数据。下面就来看下Set基本类型相关的指令吧。
SADD
可用版本:>= 1.0.0
时间复杂度: 添加一个元素的复杂度为O(1),添加N个元素的复杂度为O(N)
命令格式
|
|
命令描述
- 将一个或多个
member
元素添加至key
对应的集合中,如果集合中已经存在member
元素,本次操作会被忽略 - 如果
key
对应的集合不存在,会创建一个空集合,然后把member
元素插入 - 如果
key
对应的不是集合类型,会返回错误
返回值
整数值:真正插入到列表的中元素个数(已经存在列表的元素不会被插入)
示例
|
|
SMEMBERS
可用版本:>= 1.0.0
时间复杂度:O(N),N为集合大小
命令格式
|
|
命令描述
- 返回
key
对应集合中的所有元素 - 这个命令会返回所有元素,如果集合较大,会影响Redis性能,建议线上不要使用这个命令,可以使用
SSCAN
命令代替
返回值
数组:集合中所有元素
示例
|
|
SISMEMBER
可用版本:>= 1.0.0
时间复杂度:O(1)
命令格式
|
|
命令描述
- 判断
member
是否为key
集合中的元素
返回值
1:member
是集合中的元素
0:集合不存在或者member
不是集合中的元素
示例
|
|
SMISMEMBER
可用版本:>= 6.2.0
时间复杂度:O(N),N为提供的元素数量
命令格式
|
|
命令描述
-
判断给定的多个
member
是否为key
集合中的元素 -
对于每一个
member
元素,返回1
表示存在集合key
中,当不在集合中或者集合本身就不存在时,返回0
返回值
数组:由1和0组成,与member
数量一致,且位置一一对应,表示对应位置的member
是否在集合中。
示例
|
|
SPOP
可用版本:>= 1.0.0
时间复杂度:未提供count值时,复杂度为O(1);提供count值时,复杂度为O(N),N为返回元素的个数
3.2.0版本后增加可选参数count
命令格式
|
|
命令描述
-
从集合中随机移除一个元素,并返回该元素值
-
如果只想返回元素但不移除,使用
SRANDMEMBER
命令 -
默认移除并返回一个元素,指定
count
后返回count
个元素;若count
大于集合长度时,返回集合中所有元素
返回值
未指定count时:返回元素值或者nil(key不存在)
指定count时:移除的元素集合或者空集合(key不存在)
示例
|
|
SRANDMEMBER
可用版本:>= 1.0.0
时间复杂度:未提供count值时,复杂度为O(1);提供count值时,复杂度为O(N),N为返回元素的个数
命令格式
|
|
命令描述
-
未指定
count
值时,随机返回集合中一个元素值 -
count
为正数时,且小于等于集合长度时,返回大小为count
的集合,集合中元素各不相同;如果count
大于集合长度,则返回集合中全部元素 -
count
为负数时,那么命令返回一个数组,数组中的元素可能会重复出现多次
,数组的长度为count
的绝对值。
返回值
未指定count时:返回随机元素值或者nil(当集合不存在时)
指定count时:返回的元素集合或者空集合(当集合不存在时)
示例
|
|
SREM
可用版本:>= 1.0.0
时间复杂度:O(N),N为给定的元素数量
命令格式
|
|
命令描述
-
从集合中移除给定的元素值
member
-
给定的元素值
member
不属于该集合时,会忽略该元素 -
给定
key
集合不存在时,会被当成空集合来处理 -
当
key
对应的不是集合类型时,返回错误
返回值
整数值:真正从集合中移除的元素个数
示例
|
|
SMOVE
可用版本:>= 1.0.0
时间复杂度:O(1)
命令格式
|
|
命令描述
- 将
source
集合中的元素member
,移动到集合destination
中 - 这是一个原子操作,在任何时刻,
member
要么在source
中,要么在destination
中 - 如果集合
source
不存在,或者source
集合中没有member
元素,不执行任何操作,直接返回0 - 如果
destination
集合中已经存在了member
元素值,那么只会将source
中的member
移除 - 如果
source
或者destination
对应的不是set类型的元素,返回error
返回值
1:元素移动成功
0:source
集合中不包含member
元素,未执行任何操作
示例
|
|
SCARD
可用版本:>= 1.0.0
时间复杂度:O(1)
命令格式
|
|
命令描述
- 返回集合的基数(长度)
返回值
整数值:集合长度,当集合不存在时返回0
示例
|
|
SSCAN
可用版本:>= 2.8.0
时间复杂度:每次调用时间复杂度为O(1),完整遍历为O(N),N为集合元素个数
命令格式
|
|
命令描述
- 遍历集合
- 具体命令描述,见后续数据库操作章节中的
SCAN
部分
SINTER
可用版本:>= 1.0.0
时间复杂度:O(N*M),N为所有给定集合中最小的集合长度,M为给定集合的个数
命令格式
|
|
命令描述
- 返回给定集合的交集
例如:
|
|
- 当给定集合中包含空集时,返回的结果一定也是空集,因为空集与其他集合的交集一定是空集
返回值
数组:所有集合交集的元素列表
示例
|
|
SINTERSTORE
可用版本:>= 1.0.0
时间复杂度:O(N*M),N为所有给定集合中最小的集合长度,M为给定集合的个数
命令格式
|
|
命令描述
-
命令与与
SINTER
功能类似,即取多个集合的交集,但是不返回结果,而是将结果保存到destination
中 -
如果
destination
集合已经存在,数据将会被覆盖
返回值
整数值:结果集长度
示例
|
|
SUNION
可用版本:>= 1.0.0
时间复杂度:O(N),N给定集合的元素总数
命令格式
|
|
命令描述
- 返回给定集合的并集
例如:
|
|
返回值
数组:所有集合并集的元素列表
示例
|
|
SUNIONSTORE
可用版本:>= 1.0.0
时间复杂度:O(N),N给定集合的元素总数
命令格式
|
|
命令描述
-
命令与与
SUNION
功能类似,即取多个集合的并集,但是不返回结果,而是将结果保存到destination
中 -
如果
destination
集合已经存在,数据将会被覆盖
返回值
整数值:结果集长度
示例
|
|
SDIFF
可用版本:>= 1.0.0
时间复杂度:O(N),N给定集合的元素总数
命令格式
|
|
命令描述
- 返回第一个集合,与后续所有集合的差集
例如:
|
|
返回值
数组:结果集的元素列表
示例
|
|
SDIFFSTORE
可用版本:>= 1.0.0
时间复杂度:O(N),N给定集合的元素总数
命令格式
|
|
命令描述
-
命令与与
SDIFF
功能类似,即计算第一个集合与后续给定集合的差集,但是不返回结果,而是将结果保存到destination
中 -
如果
destination
集合已经存在,数据将会被覆盖
返回值
整数值:结果集长度
示例
|
|
更多
微信公众号:CodePlayer