 如何在Redis中管理Sets)
系列教程导航如何在 ubuntu18.04 上安装和保护 redis如何连接到 Redis 数据库如何管理 Redis 数据库和 Keys如何在 Redis 中管理副本和客户端如何在 Redis 中管理字符串如何在 Redis 中管理 list如何在 Redis 中管理 Hashes如何在 Redis 中管理 Sets如何在 Redis 中管理 Sorted Sets如何在 Redis 中运行事务如何使 Redis 中的 Key 失效如何解决 Redis 中的故障如何从命令行更改 Redis 的配置Redis 数据类型简介介绍Redis 是一个开源的内存中键值数据存储。集合 (Sets.html)是存储在给定键 (Key.html) 下的字符串集合。当保存在集合中时单个记录值称为_成员 (Member.html)_。与列表 (List.html) 不同集合是无序的并且不允许重复的值。本教程说明了如何创建集合、检索和删除成员以及比较不同集合的成员。如何使用本指南本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。本指南中显示的命令已在运行 Redis 版本 4.0.9 的 Ubuntu 18.04 服务器上进行了测试。要设置类似的环境您可以按照我们的指南 如何在 Ubuntu 18.04 上安装和保护 Redis 的步骤 1进行操作。我们将通过使用 Redis 命令行界面 (redis-cli.html) 运行它们来演示这些命令的行为。请注意如果您使用其他 Redis 界面例如 Redli则某些命令的确切输出可能会有所不同。另外您可以提供一个托管的 Redis 数据库实例来测试这些命令但是请注意根据数据库提供者所允许的控制级别本指南中的某些命令可能无法按所述方式工作。要配置 DigitalOcean 托管数据库请遵循我们的 托管数据库产品文档。然后您必须安装 Redli或设置 TLS 隧道才能通过 TLS 连接到托管数据库。创建集合 (Sets.html)sadd命令允许您创建一个集合并向其中添加一个或多个成员。下面的例子将创建一个名为key_horror的键并包含成员Frankenstein和Godzillasadd key_horrorFrankensteinGodzilla如果成功sadd将返回一个整数显示它添加到集合中的成员数量(integer.html) 2如果您尝试将集合的成员添加到已经持有非集合值的键中它将返回错误。在此块中的第一个命令创建一个 列表 命名的key_action一个元素Shaft。下一条命令尝试将集合成员Shane添加到列表中但是由于数据类型冲突而产生错误rpush key_actionShaftsadd key_actionShane(error.html) WRONGTYPE Operation against a key holding the wrong kind of value请注意集合不允许同一成员出现多次sadd key_comedyItsAMadMadMadMadMadWorld(integer.html) 4即使此sadd命令指定了八个成员它也会丢弃四个重复的Mad成员从而将大小设置为 4。检索集合成员在本节中我们将介绍一些 Redis 命令这些命令返回有关集合中持有的成员的信息。要练习此处概述的命令请运行以下命令这将创建一个由六个成员组成的集合该集合的键为key_stoogessadd key_stoogesMoeLarryCurlyShempJoeCurly Joe要从集合中返回每个成员请运行smembers命令然后输入要检查的键smembers key_stooges1) Curly 2) Moe 3) Larry 4) Shemp 5) Curly Joe 6) Joe要检查特定值是否是集合的成员请使用sismember命令sismember key_stoogesHarpo如果元素Harpo是key_stooges集合的成员sismember则将返回1。否则它将返回0(integer.html) 0要查看给定集合中有多少成员换句话说找到给定集合的_基数 (Cardinality.html)_请运行scardscard key_stooges(integer.html) 6要从集合中返回随机元素请运行srandmembersrandmember key_stoogesLarry要从集合中返回多个随机、不同的元素可以在srandmember命令后加上要检索的元素数量srandmember key_stooges31) Larry 2) Moe 3) Curly Joe如果您向srandmember传递一个负数则该命令可以多次返回相同的元素srandmember key_stooges-31) Shemp 2) Curly Joe 3) Curly Joesrandmember尽管所使用的随机元素函数的性能在较大的数据集中有所改善但它并不是完全随机的。有关更多详细信息请参见 命令的官方文档。删除集合成员Redis 带有用于从集合删除成员三个命令spopsrem和smove。spop从中随机选择指定数量的成员并返回它们类似于srandmember但是从集合中删除它们。它接受包含集合的键名和要从集合中删除的成员数作为参数。如果您未指定数字spop则默认为返回并删除单个值。以下示例命令将从key_stooges上一节创建的集合中删除并返回两个随机选择的元素spop key_stooges21) Shemp 2) Larrysrem允许您从集合中删除一个或多个特定成员而不是随机成员srem key_stoogesJoeCurly Joe而不是返回从集合中删除的成员srem返回一个整数显示已删除的成员数(integer.html) 2使用smove一个成员从一个集合移动到另一个。此命令以该顺序接受源集合、目标集合和要移动的成员作为参数。请注意一次smove只能移动一位成员smove key_stooges key_jambandsMoe如果命令成功移动了成员它将返回(integer.html) 1(integer.html) 1如果smove失败它将返回(integer.html) 0。请注意如果目标键尚不存在smove在将成员移入之前会创建它。比较集合Redis 还提供了许多命令可以找到集合之间的差异和相似性。为了演示如何工作的这部分将引用三个名为presidentskings和beatles的集合。如果您想亲自尝试本节中的命令请创建这些集合并使用以下sadd命令填充它们sadd presidentsGeorgeJohnThomasJamessadd kingsEdwardHenryJohnJamesGeorgesadd beatlesJohnGeorgePaulRingosinter比较不同的集合并返回_集合相交_或出现在每个集合中的值sinter presidents kings beatles1) John 2) Georgesinterstore执行类似的功能但不是返回相交成员而是在包含这些相交成员的指定目的地创建了一个新集合。请注意如果目的地已经存在sinterstore将覆盖其内容sinterstore new_set presidents kings beatles smembers new_set1) John 2) Georgesdiff返回_集合差异_ — 由以下每个集合的第一个指定集合的差异得出的成员sdiffpresidents kings beatles1) Thomas换句话说sdiff查看第一个给定集合中的每个成员然后将其与每个连续集合中的成员进行比较。第一组中也出现在以下组中的任何成员都将被删除sdiff返回其余成员。可以将其视为从第一组中删除后续组的成员。sdiffstore执行与相似的功能sdiff但不返回集合差而是在给定的目的地创建一个包含集合差的新集合sdiffstore new_set beatles kings presidents smembers new_set1) Paul 2) Ringo像sinterstore一样sdiffstore将覆盖目标键如果已存在。sunion返回_集合并集_或包含您指定的每个集合的每个成员的集合sunion presidents kings beatles1) Thomas 2) George 3) Paul 4) Henry 5) James 6) Edward 7) John 8) Ringosunion将结果视为新集因为它只允许出现任何给定成员。sunionstore执行类似的功能但是在给定的目的地创建一个包含集合并集的新集合而不仅仅是返回结果sunionstore new_set presidents kings beatles(integer.html) 8与sinterstore和sdiffstore一样sunionstore如果目标键已经存在它将覆盖目标键。结论本指南详细介绍了用于在 Redis 中创建和管理集合的许多命令。如果您想在本指南中概述其他相关的命令、参数或过程请在下面的评论中提出疑问或提出建议。有关 Redis 命令的更多信息请参阅关于 如何管理 Redis 数据库的 系列教程。作者分布式编程出处https://tushu.info/如果你喜欢本文请长按二维码关注分布式编程说明本文命令基于 Redis 4.0.9 版本测试适用于大多数现代 Redis 版本。基本集合命令在不同版本间保持稳定但具体输出格式或高级特性可能随版本更新有所变化。