Redis 的命令详解 - SET 篇
SET 命令详解
跟 SET 相关的命令一共有 15 种,这里只介绍常用的
SADD : 添加成员
起始版本 : 1.0.0
时间复杂度 : O(N),N为要添加的成员的个数
如果key不存在,则在添加前先创建一个set,如果指定成员在set中已存在,该成员将被忽略。
语法
SADD key member1 [member2 ...]
返回值
已添加到集合中的成员数量,不包括已经存在的成员,如果key对应的value不是 set 类型,返回错误。
历史
redis 版本 >= 2.4 时,该命令可以接受多个member参数
SREM : 删除成员
起始版本 : 1.0.0
时间复杂度 : O(N),N为要删除的成员的个数
如果指定成员在set中不存在,则忽略。
语法
SREM key member1 [member2 ...]
返回值
删除成员的数量。如果key不存在,则视为空集,返回 0。
SCARD : 获取set中的成员数量
起始版本 : 1.0.0
时间复杂度 : O(1)
语法
SCARD key
返回值
set 中的成员的数量,key 不存在时,返回0
SISMEMBER : 查看成员是否存在
起始版本 : 1.0.0
时间复杂度 : O(1)
语法
SISMEMBER key member
返回值
- 1 : 如果元素是集合的成员。
- 0 : 如果元素不是集合的成员,或者key不存在。
SMEMBERS : 获取所有的成员
起始版本 : 1.0.0
时间复杂度 : O(N),其中N是集合中成员的数量
语法
SMEMBERS key
返回值
集合中的所有成员
SMOVE : 移动成员到另一个集合
起始版本 : 1.0.0
时间复杂度 : O(1)
将成员从源set移动到目标set,此操作是原子性的。
如果目标set已存在指定的元素,则仅将指定元素从源set中删除。
语法
SMOVE 源key 目标key member
返回值
- 错误 : 源key或目标key对应的 value 不是set类型
- 0 : 源set不存在指定的成员
- 1 : 移动成功
SDIFF : 求差集
起始版本 : 1.0.0
时间复杂度 : O(N),其中N是所有给定集合中元素的总数。
求第一个集合与后面所有集合之间的差集。
例如
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
复制代码
则,SDIFF key1 key2 key3 = {b,d}
,简单理解就是只保留第一个集合中,其他集合没有的成员
如果 key 不存在,则认为是空集。
语法
SDIFF key [otherKey ...]
返回值
结果集的所有成员
SDIFFSTORE : 存储差集
起始版本 : 1.0.0
时间复杂度 : O(N),其中N是所有给定集合中元素的总数。
求第一个集合与后面所有集合之间的差集,并将它保存到目标集合中。如果目标集合已经存在,则将其覆盖。
语法
SDIFFSTORE 目标key key [otherKey ...]
返回值
结果集中成员的数量
SINTER : 求交集
起始版本 : 1.0.0
时间复杂度 : 最坏的情况 O(N * M),其中N是最小集合的成员个数,M是集合的个数。
求所有给定集合的交集
例如,有
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
复制代码
则SINTER key1 key2 key3 = {c}
,即所有集合中都有的成员
不存在的 key 被认为是空集。如果其中一个 key 为空集,则结果集也为空集(因为与空集的交集都是空集)
语法
SINTER key [otherKey ...]
当只设置一个key时,返回该key的所有成员,此时相当于
SMEMBERS key
命令
返回值
结果集的所有成员。
SINTERSTORE : 存储交集
起始版本 : 1.0.0
时间复杂度 : 最坏的情况 O(N * M),其中N是最小集合的成员个数,M是集合的个数。
求所有给定集合的交集,并将它保存到目标集合中。如果目标集合已经存在,则将其覆盖。
不存在的 key 被认为是空集。如果其中一个 key 为空集,则结果集也为空集
语法
SINTERSTORE 目标key key [otherKey ...]
返回值
结果集中成员的数量
SUNION : 求并集
起始版本 : 1.0.0
时间复杂度 : O(N),其中N是所有给定集合中元素的总数
求所有给定集合的并集,不存在的key被认为是空集。
语法
SUNION key [otherKey ...]
返回值
结果集中的所有成员
SUNIONSTORE : 存储并集
起始版本 : 1.0.0
时间复杂度 : O(N),其中N是所有给定集合中元素的总数
将所有给定集合的并集存储到目标集合中,不存在的key被认为是空集,如果目标集合已存在,则覆盖。
语法
SUNIONSTORE 目标key key [otherKey ...]
返回值
结果集中成员的数量
SPOP : 随机删除(弹出)指定个数的成员
起始版本 : 1.0.0
时间复杂度 : O(1)
随机删除并返回指定个数的成员
语法
SPOP key [count]
redis 3.2 及以上版本才可以指定 count 参数
返回值
随机删除成员
SRANDMEMBER : 随机返回指定个数的成员
起始版本 : 1.0.0
时间复杂度 : O(N),其中N为要返回成员的个数
redis 2.6 及以上版本才可以指定 count 参数
不指定 count 时,随机返回一个成员
指定 count 时
- 如果 count 为正数,随机返回 count 个不同成员
- 如果 count 为负数,随机选择 1 个成员,返回 count 个
语法
SRANDMEMBER key [count]
返回值
返回的成员