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

相关推荐
言之。3 分钟前
Django REST Framework响应类Response详解
后端·python·django
Abadbeginning11 分钟前
FastSoyAdmin centos7云服务器+宝塔部署
vue.js·后端·python
xuejianxinokok1 小时前
PostgreSQL 18 新功能:虚拟生成列
数据库·后端
未来影子1 小时前
SpringAI(GA):Neo4j向量数据库存储快速上手
后端
武子康1 小时前
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例
大数据·后端·spark
知其然亦知其所以然1 小时前
MySQL8.x 面试高频题:为什么一定要有主键?99%的人答不全
后端·mysql·面试
FE_C_P小麦1 小时前
Git 常用指令
前端·后端·github
某某祺1 小时前
向量存储、检索及 Qdrant 浅析
后端
天天摸鱼的java工程师1 小时前
线上服务无辜假死状态:一次 GC Overhead 的深度排查
java·后端