Redis 的命令详解 - SET 篇

2,605 阅读5分钟

相关文章

Redis 的命令详解 - Key 篇
Redis 的命令详解 - String 篇
Redis 的命令详解 - Hash 篇
Redis 的命令详解 - List 篇
Redis 的命令详解 - Sorted 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]

返回值

返回的成员