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

相关推荐
青枫863 分钟前
流程控制
后端
青枫866 分钟前
Java生成一个随机数
后端
用户2468267011479 分钟前
事务消息
后端
lizhongxuan10 分钟前
本体论: 构建AI的“世界观”
后端
元清加油35 分钟前
【Goland】:协程和通道
服务器·开发语言·后端·网络协议·golang
CodeSheep40 分钟前
我天,Java 已沦为老四。。
前端·后端·程序员
这里有鱼汤43 分钟前
原来基金经理都偷偷用这个指标选股,难怪回撤小还赚钱
后端·python
掘金安东尼1 小时前
使用 Web Components 与 CSS Modules 构建原生应用架构
javascript·后端·面试
CF14年老兵1 小时前
🐍 Python黑魔法手册:让你的代码从能跑到飞起的奇技淫巧
后端·python·trae
小鱼人爱编程1 小时前
Java基石--动态代理让你无中生有
java·后端·架构