Redis(15)Redis的集合(Set)类型有哪些常用命令?

Redis 的集合(Set)类型是无序的字符串集合,不允许重复元素。集合类型支持一系列常用命令,用于添加、删除和查询集合中的元素。下面详细介绍 Redis 集合类型的常用命令,并结合代码示例进行展示。

1. SADD - 向集合添加一个或多个元素

SADD 命令用于向集合添加一个或多个元素,如果元素已存在则忽略。

bash 复制代码
SADD key member1 [member2 ...]

示例:

bash 复制代码
SADD myset "Hello"
SADD myset "World"

2. SREM - 移除集合中的一个或多个元素

SREM 命令用于移除集合中的一个或多个元素,如果元素不存在则忽略。

bash 复制代码
SREM key member1 [member2 ...]

示例:

bash 复制代码
SREM myset "World"

3. SMEMBERS - 返回集合中的所有成员

SMEMBERS 命令用于返回集合中的所有成员。

bash 复制代码
SMEMBERS key

示例:

bash 复制代码
SMEMBERS myset

4. SISMEMBER - 判断元素是否是集合的成员

SISMEMBER 命令用于判断元素是否是集合的成员。

bash 复制代码
SISMEMBER key member

示例:

bash 复制代码
SISMEMBER myset "Hello"
SISMEMBER myset "World"

5. SCARD - 返回集合中元素的数量

SCARD 命令用于返回集合中元素的数量。

bash 复制代码
SCARD key

示例:

bash 复制代码
SCARD myset

6. SPOP - 随机移除并返回集合中的一个元素

SPOP 命令用于随机移除并返回集合中的一个元素。

bash 复制代码
SPOP key

示例:

bash 复制代码
SPOP myset

7. SRANDMEMBER - 随机返回集合中的一个或多个元素,但不移除

SRANDMEMBER 命令用于随机返回集合中的一个或多个元素,但不移除。

bash 复制代码
SRANDMEMBER key [count]

示例:

bash 复制代码
SRANDMEMBER myset
SRANDMEMBER myset 2

8. SMOVE - 将集合中的元素移动到另一个集合

SMOVE 命令用于将集合中的元素移动到另一个集合。

bash 复制代码
SMOVE source destination member

示例:

bash 复制代码
SADD myset1 "one"
SADD myset2 "two"
SMOVE myset1 myset2 "one"

9. SUNION - 返回所有给定集合的并集

SUNION 命令用于返回所有给定集合的并集。

bash 复制代码
SUNION key1 [key2 ...]

示例:

bash 复制代码
SADD myset1 "a"
SADD myset1 "b"
SADD myset2 "b"
SADD myset2 "c"
SUNION myset1 myset2

10. SINTER - 返回所有给定集合的交集

SINTER 命令用于返回所有给定集合的交集。

bash 复制代码
SINTER key1 [key2 ...]

示例:

bash 复制代码
SADD myset1 "a"
SADD myset1 "b"
SADD myset2 "b"
SADD myset2 "c"
SINTER myset1 myset2

11. SDIFF - 返回所有给定集合的差集

SDIFF 命令用于返回所有给定集合的差集。

bash 复制代码
SDIFF key1 [key2 ...]

示例:

bash 复制代码
SADD myset1 "a"
SADD myset1 "b"
SADD myset2 "b"
SADD myset2 "c"
SDIFF myset1 myset2

12. SUNIONSTORE - 将所有给定集合的并集存储在指定的集合中

SUNIONSTORE 命令用于将所有给定集合的并集存储在指定的集合中。

bash 复制代码
SUNIONSTORE destination key1 [key2 ...]

示例:

bash 复制代码
SUNIONSTORE resultset myset1 myset2
SMEMBERS resultset

13. SINTERSTORE - 将所有给定集合的交集存储在指定的集合中

SINTERSTORE 命令用于将所有给定集合的交集存储在指定的集合中。

bash 复制代码
SINTERSTORE destination key1 [key2 ...]

示例:

bash 复制代码
SINTERSTORE resultset myset1 myset2
SMEMBERS resultset

14. SDIFFSTORE - 将所有给定集合的差集存储在指定的集合中

SDIFFSTORE 命令用于将所有给定集合的差集存储在指定的集合中。

bash 复制代码
SDIFFSTORE destination key1 [key2 ...]

示例:

bash 复制代码
SDIFFSTORE resultset myset1 myset2
SMEMBERS resultset

示例代码

下面是一个完整的示例,展示了如何使用上述常用命令操作 Redis 集合类型:

bash 复制代码
# 启动 Redis CLI
redis-cli

# 向集合添加元素
SADD myset "Hello"
SADD myset "World"

# 返回集合中的所有成员
SMEMBERS myset  # 输出: 1) "Hello"  2) "World"

# 判断元素是否是集合的成员
SISMEMBER myset "Hello"  # 输出: 1
SISMEMBER myset "Redis"  # 输出: 0

# 返回集合中元素的数量
SCARD myset  # 输出: 2

# 随机返回集合中的一个或多个元素
SRANDMEMBER myset  # 输出: 随机一个元素
SRANDMEMBER myset 2  # 输出: 随机两个元素

# 随机移除并返回集合中的一个元素
SPOP myset  # 输出: 随机一个元素

# 将集合中的元素移动到另一个集合
SADD myset1 "one"
SADD myset2 "two"
SMOVE myset1 myset2 "one"
SMEMBERS myset2  # 输出: 1) "two"  2) "one"

# 返回所有给定集合的并集
SADD myset1 "a"
SADD myset1 "b"
SADD myset2 "b"
SADD myset2 "c"
SUNION myset1 myset2  # 输出: 1) "a"  2) "b"  3) "c"

# 返回所有给定集合的交集
SINTER myset1 myset2  # 输出: 1) "b"

# 返回所有给定集合的差集
SDIFF myset1 myset2  # 输出: 1) "a"

# 将所有给定集合的并集存储在指定的集合中
SUNIONSTORE resultset myset1 myset2
SMEMBERS resultset  # 输出: 1) "a"  2) "b"  3) "c"

# 将所有给定集合的交集存储在指定的集合中
SINTERSTORE resultset myset1 myset2
SMEMBERS resultset  # 输出: 1) "b"

# 将所有给定集合的差集存储在指定的集合中
SDIFFSTORE resultset myset1 myset2
SMEMBERS resultset  # 输出: 1) "a"

注意事项

  1. 无序性:集合是无序的,元素的返回顺序可能与插入顺序不同。
  2. 唯一性:集合中的元素是唯一的,重复添加相同的元素不会增加集合的大小。
  3. 操作的原子性:所有集合操作都是原子的,确保数据的一致性。

总结

Redis 的集合类型命令非常丰富,支持多种操作,如添加、删除、查询、移动、集合运算等。通过这些命令,你可以对 Redis 中的集合类型数据进行灵活的操作和管理。上述示例代码涵盖了大多数常用的集合命令,帮助你快速掌握 Redis 集合类型的操作。

相关推荐
蚂蚁背大象17 小时前
Rust 所有权系统是为了解决什么问题
后端·rust
子玖19 小时前
go实现通过ip解析城市
后端·go
Java不加班19 小时前
Java 后端定时任务实现方案与工程化指南
后端
心在飞扬19 小时前
RAG 进阶检索学习笔记
后端
Moment19 小时前
想要长期陪伴你的助理?先从部署一个 OpenClaw 开始 😍😍😍
前端·后端·github
Das1_19 小时前
【Golang 数据结构】Slice 底层机制
后端·go
得物技术19 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
古时的风筝19 小时前
花10 分钟时间,把终端改造成“生产力武器”:Ghostty + Yazi + Lazygit 配置全流程
前端·后端·程序员
Cache技术分享19 小时前
340. Java Stream API - 理解并行流的额外开销
前端·后端