redis中的set类型和常用命令详解

set 类型

Redis 中的 SET 类型是一种无序、唯一的字符串集合,支持高效的集合操作(如交集、并集、差集)。其与 list 类型相似, 但差别是: list 类型允许出现重复值, 而 set 类型不允许出现重复值。

set 类型格式如下:

key value1 value2...

常用命令

1. SADD

将指定元素添加到指定的 set 中。若已是此 set 中存在的元素, 则被忽略; 若不存在, 则添加。

语法:

SADD key member [member ...]

2. SMEMBERS

返回存储在指定 set 中的所有元素。

语法:

SMEMBERS key

3. SISMEMBER

判断指定的元素是否存在指定的 set 中, 若存在则返回 1, 若不存在则返回 0

语法:

SISMEMBER key member

4. SREM

删除存储在指定 set 中的指定元素。若元素存在则删除, 并返回 1;若不存在,则将命令忽略,并返回 0。若指定的 key 不是 set 类型时, 将报错。

语法:

SREM key member [member ...]

5. SCARD

返回存储在 set 中的元素个数。

语法:

SCARD key

6. SRANDMEMBER

从 指定的set 中随机返回指定数量的元素, 默认为 1

  • 若指定的 set 为空, 则返回 nil
  • 若为指定的数为负数, 则返回这个数的绝对值数量的元素。
  • 当指定数量为正数, 且大于 set 中所含元素数量时, 将返回 set 中所存储的所有元素。
  • 当指定数量为负数, 且其绝对值大于 set 中所含元素数量时, 将返回指定数量的绝对值数量的元素, 允许产生重复。

语法:

SRANDMEMBER key [count]

7. SPOP

随机返回并删除指定数量的指定 set 中的元素, 默认为 1

语法:

SPOP key [count]

8. SMOVE

将一个元素从源 set 移动到指定 set 中。

  1. 若指定元素不存在于源set中, 返回 0 (失败)

  2. 若指定元素存在于源set中, 返回 1(成功)

  3. 若指定 set 不存在, 则系统会自动创建

  4. 若指定 set 的已包含指定的元素, 则系统会继续移动, 但 set 因元素的唯一性会自动去重。

  5. 若指定的 key 不是 set, 则报类型错误 WRONGTYPE Operation

语法:

SMOVE source destination member
  • source: 源 set 的键名。
  • destination: 目标 set 的键名。
  • member: 要移动的元素。

注: 此命令是原子性的, 意味着此命令只会完全成功或完全失败

集合计算

差集计算:

1. SDIFF

对多个指定 set 的差集进行计算, 返回属于 key1, 但不属于其他所有set的元素。

语法:

SDIFF key1 key2 [key3 ...]
2. SDIFFSTORE

将差集的结果存储到指定的 set 中, 若指定的 set 已存在, 则将其覆盖。

语法:

SDIFFSTORE destination key1 key2 [key3 ...]

注意:

若 key1 不存在, 则返回空集

若其他 set 不存在, 则视为空集, 不影响结果

交集计算

1. SINTER

返回所有指定 set 的交集

语法:

SINTER key1 key2 [key3 ...]
2. SINTERSTORE

将交集的结果存储到指定的 set 中, 若指定的 set 已存在, 则将其覆盖。

语法:

SINTERSTORE destination key1 key2 [key3 ...]

注意:

若任意一个key不存在,结果为空集。

所有指定 set 的共同元素才会被返回。

并集计算

1. SUNION

返回所有 set 的并集

语法:

SUNION key1 key2 [key3 ...]
2. SUNIONSTORE

将并集的结果存储到指定的 set 中, 若指定的 set 已存在, 则将其覆盖。

语法:

SUNIONSTORE destination key1 key2 [key3 ...]

注意:

不存在的 key 被视为空集,不影响结果。

应用场景

  1. 社交网络
    • 差集:找出用户 A 关注但用户 B 未关注的人。
    • 交集:找出共同好友。
    • 并集:合并多个群组的成员。
  2. 电商系统
    • 交集:筛选同时包含多个标签的商品(如“打折”且“库存充足”)。
  3. 数据分析
    • 并集:统计多个日期内的独立访客总数(去重)。

通过合理使用集合运算,可以高效解决数据关联性问题,但需注意性能与数据规模的平衡。

性能

交集计算 (SINTER) 在集合数量多或元素量大时可能较慢。

使用 *STORE 版本可减少客户端数据传输压力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值