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 集合类型的操作。

相关推荐
两点王爷1 小时前
SpringBoot 项目集成 GeoServer 源码,实现地图服务发布
java·spring boot·后端
leoZ2312 小时前
2026-09-09-springboot-cloud-deploy-pitfalls
java·前端·javascript·vue.js·人工智能·spring boot·后端
海上彼尚3 小时前
Cursor 模型的强度实测排行
前端·人工智能·后端
GoGeekBaird4 小时前
从「跑完即销毁」到「用完再销毁」:云沙箱的一次进化
后端·github·ai编程
孫治AllenSun4 小时前
【LangChain4J-09】开发学习知识点
spring boot·后端·学习
lisin-lee-cooper5 小时前
简单聊聊 Spring 框架源码
java·后端·spring
复方金银花颗粒5 小时前
reactor和proactor的好处和坏处。为什么要用reactor而不用 proactor?
后端·信号处理
IT_陈寒5 小时前
JavaScript的这个隐式转换特性差点让我加班到凌晨
前端·人工智能·后端
用户8356290780516 小时前
使用 Python 在 Excel 中添加和编辑形状
后端·python