当前位置: 首页 > news >正文

redis数据结构-08(SINTER、SUNION、SDIFF、SISMEMBER)

集合运算:SINTER、SUNION、SDIFF、SISMEMBER

Redis 集合是一种功能强大的数据结构,可用于存储一组唯一元素。本课基于上一课对 Redis 集合的介绍,深入探讨了使 Redis 集合如此多功能的基本集合操作: SINTERSUNIONSDIFFSISMEMBER 。理解这些操作对于高效地管理和查询 Redis 数据库中的数据至关重要。这些操作使您能够直接在 Redis 中执行复杂的数据分析和操作,从而最大限度地减少将数据传输到其他系统进行处理的需要。

设置交叉点:SINTER

SINTER 命令计算多个集合的交集。换句话说,它返回_所有_指定集合的​​所有元素。这对于查找不同数据组中的共同元素非常有用。

基本用法

SINTER 的语法很简单:

SINTER key1 key2 [key3 ...]

其中 key1key2 等等是您想要相交的集合的名称。

例子

假设我们有两组代表喜欢不同编程语言的用户:

  • users:python :喜欢 Python 的用户
  • users:javascript :喜欢 JavaScript 的用户

我们可以使用 SINTER 找到_同时_喜欢 Python 和 JavaScript 的用户:

SADD users:python user1 user2 user3
SADD users:javascript user2 user4 user5
SINTER users:python users:javascript

结果将是:

1) "user2"

这表明 user2 是唯一一个同时喜欢 Python 和 JavaScript 的用户。

多组

SINTER 可以处理两个以上的集合。例如,如果我们有第三个集合 users:redis

SADD users:redis user2 user3 user6
SINTER users:python users:javascript users:redis

结果将是:

1) "user2"

因为 user2 是所有三个集合的唯一成员。

空集

如果任何集合为空, SINTER 将返回一个空集。

SADD users:python user1 user2 user3
SINTER users:python users:nonexistent_set

结果将是一个空集( redis-cli 中的空数组)。

SINTERSTORE

有时,您可能希望将交集的结果存储在一个新集合中。这时, SINTERSTORE 就派上用场了。

SINTERSTORE destination key1 key2 [key3 ...]

此命令对集合 key1key2 等进行求交,并将结果存储在名为 destination 的集合中。

例子:

SADD users:python user1 user2 user3
SADD users:javascript user2 user4 user5
SINTERSTORE users:python_javascript users:python users:javascript
SMEMBERS users:python_javascript

SMEMBERS 命令将返回:

1) "user2"

集合 users:python_javascript 现在包含两个原始集合的交集。

集合并集:SUNION

SUNION 命令返回多个集合的并集。这意味着它返回_任何_指定集合中存在的所有唯一元素。

基本用法

SUNION 的语法是:

SUNION key1 key2 [key3 ...]

其中 key1key2 等等是要合并的集合的名称。

例子

使用我们之前的用户和编程语言的示例:

SADD users:python user1 user2 user3
SADD users:javascript user2 user4 user5
SUNION users:python users:javascript

结果将是:

1) "user1"
2) "user2"
3) "user3"
4) "user4"
5) "user5"

这将显示所有喜欢 Python 或 JavaScript(或两者兼有)的用户。请注意, user2 仅出现一次,因为集合仅包含唯一元素。

多组

SINTER 类似, SUNION 可以处理多个集合:

SADD users:redis user2 user3 user6
SUNION users:python users:javascript users:redis

结果将是:

1) "user1"
2) "user2"
3) "user3"
4) "user4"
5) "user5"
6) "user6"

这包括所有喜欢 Python、JavaScript 或 Redis 的用户。

SUNIONSTORE

SINTERSTORE 类似, SUNIONSTORE 将并集的结果存储在一个新集合中:

SUNIONSTORE destination key1 key2 [key3 ...]

例子:

SADD users:python user1 user2 user3
SADD users:javascript user2 user4 user5
SUNIONSTORE users:python_javascript_or_both users:python users:javascript
SMEMBERS users:python_javascript_or_both

SMEMBERS 命令将返回:

1) "user1"
2) "user2"
3) "user3"
4) "user4"
5) "user5"

The set users:python_javascript_or_both now contains the union of the two original sets. 重试 错误原因

设置差异:SDIFF

SDIFF 命令返回集合之间的差值。它返回属于_第一个_集合但_不_属于任何其他集合的所有元素。集合的顺序对于 SDIFF 来说非常重要。

基本用法

SDIFF 的语法是:

SDIFF key1 key2 [key3 ...]

其中 key1 是要从中减去其他集合( key2key3 等)元素的集合。

例子

SADD users:python user1 user2 user3
SADD users:javascript user2 user4 user5
SDIFF users:python users:javascript

结果将是:

1) "user1"
2) "user3"

这显示了喜欢 Python 但不喜欢 JavaScript 的 user2 。user2 被排除在外,因为他们也喜欢 JavaScript。

顺序很重要

集合的顺序至关重要。如果我们反转上例中的顺序:

SDIFF users:javascript users:python

结果将是:

1) "user4"
2) "user5"

这显示了喜欢 JavaScript 但_不喜欢_ Python 的用户。

多组

SDIFF 还可以处理多个集合。例如:

SADD users:redis user3 user6
SDIFF users:python users:javascript users:redis

结果将是:

1) "user1"

这显示了喜欢 Python 但_不喜欢_ JavaScript Redis 的 user3 。user3 被排除在外,因为他们也喜欢 Redis。

SDIFFSTORE

与其他操作一样, SDIFFSTORE 将差异的结果存储在一个新集合中:

SDIFFSTORE destination key1 key2 [key3 ...]

例子:

SADD users:python user1 user2 user3
SADD users:javascript user2 user4 user5
SDIFFSTORE users:python_not_javascript users:python users:javascript
SMEMBERS users:python_not_javascript

SMEMBERS 命令将返回:

1) "user1"
2) "user3"

集合 users:python_not_javascript 现在包含两个原始集合之间的差异。

设置成员资格:SISMEMBER

SISMEMBER 命令检查给定元素是否为集合的成员。如果元素是成员,则返回 1 ;如果不是,则返回 0

基本用法

SISMEMBER 的语法是:

SISMEMBER key member

其中 key 是集合的名称, member 是要检查的元素。

例子

SADD users:python user1 user2 user3
SISMEMBER users:python user1

结果将是:

1

这表明 user1users:python 集的成员。

SISMEMBER users:python user4

结果将是:

0

这表明 user4 不是 users:python 集的成员。

检查不存在的集合

如果该集合不存在, SISMEMBER 将始终返回 0

SISMEMBER nonexistent_set user1

结果将是:

0

实例和练习

让我们通过一些实践练习来巩固你的理解。继续我们的用户和编程语言示例,考虑以下场景:

我们有代表对不同技术感兴趣的用户的集合:

  • users:python
  • users:javascript
  • users:redis
  • users:sql

以下是每组的数据:

SADD users:python user1 user2 user3 user7
SADD users:javascript user2 user4 user5 user7
SADD users:redis user3 user6 user7
SADD users:sql user1 user4 user8

现在,尝试使用我们学过的 Redis 命令来回答以下问题:

  1. 查找对 Python 和 SQL 都感兴趣的用户。 (使用 SINTER
  2. 查找对这四种技术感兴趣的所有唯一用户。 (使用 SUNION
  3. 查找对 Python 感兴趣但对 JavaScript 或 Redis 不感兴趣的用户。 (使用 SDIFF
  4. 检查用户 5 是否对 SQL 感兴趣。 (使用 SISMEMBER
  5. 将对 JavaScript 和 Redis 感兴趣的用户存储在一个名为 users:javascript_redis 的新集合中。 (使用 SINTERSTORE
  6. 将所有对 Python 或 SQL 感兴趣的用户存储在一个名为 users:python_or_sql 的新集合中。 (使用 SUNIONSTORE
  7. 将对 SQL 感兴趣但不对 Python 感兴趣的用户存储在一个名为 users:sql_not_python 的新集合中。 (使用 SDIFFSTORE

答案:

  1. SINTER users:python users:sql -> user1user7
  2. SUNION users:python users:javascript users:redis users:sql -> user1user2user3user4user5user6user7user8
  3. SDIFF users:python users:javascript users:redis -> user1
  4. SISMEMBER users:sql user5 -> 0
  5. SINTERSTORE users:javascript_redis users:javascript users:redis
  6. SUNIONSTORE users:python_or_sql users:python users:sql
  7. SDIFFSTORE users:sql_not_python users:sql users:python
http://www.xdnf.cn/news/390529.html

相关文章:

  • Linux基础io知识
  • 二叉树三大遍历-精髓(Java)
  • 代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历
  • 【大模型】MS-SWIFT : 高效、灵活的大模型微调框架
  • 【Java EE初阶 --- 多线程(初阶)】线程安全问题
  • 【Android】cmd命令
  • 大学之大:苏黎世大学2025.5.11
  • 数字化工厂中央控制室驾驶舱系统 API接口文档
  • go 通过汇编学习atomic原子操作原理
  • iVX 图形化编程平台:结合 AI 原生开发的革新与实践
  • 07.three官方示例+编辑器+AI快速学习webgl_buffergeometry_attributes_integer
  • Python-UV多环境管理
  • 5G-A来了!5G信号多个A带来哪些改变?
  • 经典音乐播放器——完美歌词 Poweramp Music Player 3 build
  • MyBatis进阶:掌握动态SQL,实现灵活的数据库查询
  • 实战项目5(08)
  • 【网络安全】——大端序(Big-Endian)​​和​​小端序(Little-Endian)
  • 【Linux系列】bash_profile 与 zshrc 的编辑与加载
  • 大语言模型通过MCP控制STM32-支持Ollama、DeepSeek、openai等
  • 大模型在肾肿瘤诊疗全流程预测及方案制定中的应用研究
  • 【英语笔记(三)】介绍谓语动词的分类,初步讲解四种基本状态:一般、进行、完成、完成进行
  • C#游戏开发中的注意事项
  • 淘宝19块钱激光雷达SDK转ROS2架构
  • 低代码开发:开启软件开发的新篇章
  • RAID磁盘阵列的概念(自用留档)
  • Redis BigKey 问题是什么
  • 卷积神经网络-从零开始构建一个卷积神经网络
  • PDF2zh插件在zotero中安装并使用
  • FramePack AI图片生成视频 v1.1 整合包
  • c++STL-string的使用