Redis 集合操作

RedisRedisBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验(Lab)中,你将探索 Redis 集合(set)操作,重点是操作唯一字符串的无序集合。你将学习如何使用 SADD 命令向集合中添加元素,使用 SUNION 执行集合并集操作,使用 SINTER 查找公共元素,以及使用 SDIFF 识别集合之间的差异。最后,你将学习如何存储集合操作的结果以供后续使用。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL redis(("Redis")) -.-> redis/RedisGroup(["Redis"]) redis/RedisGroup -.-> redis/access_cli("Connect Using CLI") redis/RedisGroup -.-> redis/insert_set("Add Set Element") redis/RedisGroup -.-> redis/verify_set("Check Set Membership") redis/RedisGroup -.-> redis/view_set("List Set Members") subgraph Lab Skills redis/access_cli -.-> lab-552104{{"Redis 集合操作"}} redis/insert_set -.-> lab-552104{{"Redis 集合操作"}} redis/verify_set -.-> lab-552104{{"Redis 集合操作"}} redis/view_set -.-> lab-552104{{"Redis 集合操作"}} end

使用 SADD 向集合中添加元素

在这一步中,你将学习如何使用 SADD 命令向 Redis 集合(set)中添加元素。Redis 中的集合是唯一字符串的无序集合。这意味着集合中的每个元素都必须是唯一的,并且元素添加到集合中的顺序不会被保留。

SADD 命令将一个或多个成员添加到集合中。如果指定的成员已经是集合的成员,则会被忽略。如果集合不存在,则会创建一个包含指定成员的新集合。

让我们首先连接到 Redis 服务器。打开你的终端并执行以下命令:

redis-cli

这个命令将打开 Redis 命令行界面(command-line interface,CLI)。

现在,让我们向名为 my_set 的集合中添加一些元素。执行以下命令:

SADD my_set "apple" "banana" "cherry"

这个命令会将字符串 "apple"、"banana" 和 "cherry" 添加到集合 my_set 中。输出将是一个整数,表示成功添加到集合中的元素数量。在这种情况下,输出应为 3

(integer) 3

现在,让我们尝试添加一个已经存在于集合中的元素。执行以下命令:

SADD my_set "apple"

这个命令将尝试将字符串 "apple" 添加到集合 my_set 中。但是,由于 "apple" 已经是集合的成员,它将被忽略。输出将为 0,表示没有添加任何新元素。

(integer) 0

要验证元素是否已添加到集合中,你可以使用 SMEMBERS 命令。执行以下命令:

SMEMBERS my_set

这个命令将返回集合 my_set 的所有成员的列表。输出应为:

1) "cherry"
2) "banana"
3) "apple"

请注意,输出中元素的顺序可能与它们添加的顺序不同。这是因为集合是无序的集合。

最后,退出 Redis CLI:

exit

退出 redis-cli 非常重要,这样你的命令才会被记录。

你现在已经成功地使用 SADD 命令向 Redis 集合中添加了元素。这是在 Redis 中使用集合的基本操作,它将在后续步骤中用于执行更复杂的操作。

使用 SUNION 计算并集

在这一步中,你将学习如何使用 SUNION 命令计算多个 Redis 集合(set)的并集(union)。集合的并集是一个新的集合,其中包含任何原始集合中存在的所有唯一元素。

首先,让我们向一个名为 my_set2 的新集合中添加一些元素。使用以下命令连接到 Redis 服务器:

redis-cli

现在,向 my_set2 添加元素:

SADD my_set2 "banana" "grape" "orange"

这个命令会将 "banana"、"grape" 和 "orange" 添加到 my_set2。输出应为 3

(integer) 3

现在我们有了两个集合,my_set(包含 "apple"、"banana"、"cherry")和 my_set2(包含 "banana"、"grape"、"orange"),我们可以使用 SUNION 命令计算它们的并集。执行以下命令:

SUNION my_set my_set2

这个命令将返回 my_setmy_set2 的并集。输出将是两个集合中存在的所有唯一元素的列表:

1) "orange"
2) "grape"
3) "apple"
4) "banana"
5) "cherry"

请注意,"banana" 在结果中只出现一次,即使它同时存在于 my_setmy_set2 中。这是因为集合只包含唯一元素。结果中元素的顺序不能保证。

最后,退出 Redis CLI:

exit

SUNION 命令将集合的并集直接返回给客户端。如果你想将结果存储在一个新的集合中,你可以使用 SUNIONSTORE 命令,这个命令不在本实验(Lab)的范围内。

在这一步中,你已经学习了如何使用 SUNION 命令计算多个 Redis 集合的并集。这是一个有用的操作,可以将来自多个集合的数据合并到一个集合中。

使用 SINTER 计算交集

在这一步中,你将学习如何使用 SINTER 命令计算多个 Redis 集合(set)的交集(intersection)。集合的交集是一个新的集合,其中仅包含 所有 原始集合中都存在的元素。

使用以下命令连接到 Redis 服务器:

redis-cli

我们已经有两个集合,my_set(包含 "apple"、"banana"、"cherry")和 my_set2(包含 "banana"、"grape"、"orange")。让我们使用 SINTER 命令计算它们的交集。执行以下命令:

SINTER my_set my_set2

这个命令将返回 my_setmy_set2 的交集。输出将是两个集合中都存在的所有元素的列表:

1) "banana"

请注意,只有 "banana" 同时存在于 my_setmy_set2 中。因此,这两个集合的交集是一个仅包含 "banana" 的集合。

让我们添加第三个集合,名为 my_set3,并将 "banana" 和 "apple" 添加到其中。

SADD my_set3 "banana" "apple"

输出应为 2

(integer) 2

现在,让我们计算 my_setmy_set2my_set3 的交集。执行以下命令:

SINTER my_set my_set2 my_set3

这个命令将返回所有三个集合的交集。输出将是:

1) "banana"

只有 "banana" 存在于所有三个集合中。

最后,退出 Redis CLI:

exit

SINTER 命令将集合的交集直接返回给客户端。如果你想将结果存储在一个新的集合中,你可以使用 SINTERSTORE 命令,你将在稍后学习它。

在这一步中,你已经学习了如何使用 SINTER 命令计算多个 Redis 集合的交集。这是一个有用的操作,用于查找多个集合之间的共同元素。

使用 SDIFF 计算差集

在这一步中,你将学习如何使用 SDIFF 命令计算 Redis 集合(set)之间的差集(difference)。集合的差集是一个新的集合,其中仅包含存在于第一个集合中,而不存在于任何后续集合中的元素。

使用以下命令连接到 Redis 服务器:

redis-cli

我们有三个集合:my_set(包含 "apple"、"banana"、"cherry"),my_set2(包含 "banana"、"grape"、"orange"),以及 my_set3(包含 "banana"、"apple")。让我们使用 SDIFF 命令计算 my_setmy_set2 之间的差集。执行以下命令:

SDIFF my_set my_set2

这个命令将返回 my_setmy_set2 之间的差集。输出将是存在于 my_set 中,但不存在于 my_set2 中的所有元素的列表:

1) "apple"
2) "cherry"

"apple" 和 "cherry" 在 my_set 中,但不在 my_set2 中。"banana" 在两个集合中都存在,因此它不包含在结果中。

现在,让我们计算 my_setmy_set2my_set3 之间的差集。执行以下命令:

SDIFF my_set my_set2 my_set3

这个命令将返回 my_setmy_set2my_set3 的并集之间的差集。输出将是:

1) "cherry"

"apple" 在 my_set 中,但也在 my_set3 中,因此它被排除。"banana" 在 my_set 中,但也在 my_set2my_set3 中,因此它也被排除。只有 "cherry" 专门存在于 my_set 中。

最后,退出 Redis CLI:

exit

SDIFF 命令将集合的差集直接返回给客户端。如果你想将结果存储在一个新的集合中,你可以使用 SDIFFSTORE 命令(本实验(Lab)未涵盖)。

在这一步中,你已经学习了如何使用 SDIFF 命令计算 Redis 集合之间的差集。这是一个有用的操作,用于查找特定集合独有的元素。

使用 SINTERSTORE 存储结果

在这一步中,你将学习如何使用 SINTERSTORE 命令将交集(intersection)操作的结果存储到一个新的集合(set)中。当你想要对集合的交集执行进一步的操作,而又不想每次都重新计算它时,这非常有用。

使用以下命令连接到 Redis 服务器:

redis-cli

我们有三个集合:my_set(包含 "apple"、"banana"、"cherry"),my_set2(包含 "banana"、"grape"、"orange"),以及 my_set3(包含 "banana"、"apple")。在上一步中,我们计算了这些集合的交集,发现只有 "banana" 存在于所有三个集合中。

现在,让我们使用 SINTERSTORE 命令将 my_setmy_set2my_set3 的交集结果存储到一个名为 intersection_set 的新集合中。执行以下命令:

SINTERSTORE intersection_set my_set my_set2 my_set3

这个命令将计算 my_setmy_set2my_set3 的交集,并将结果存储在一个名为 intersection_set 的新集合中。输出将是一个整数,表示结果集合中元素的数量。在这种情况下,输出应该是 1,因为交集只包含一个元素("banana")。

(integer) 1

为了验证交集是否已正确存储,你可以使用 SMEMBERS 命令查看 intersection_set 的成员。执行以下命令:

SMEMBERS intersection_set

这个命令将返回集合 intersection_set 的所有成员的列表。输出应该是:

1) "banana"

这证实了 my_setmy_set2my_set3 的交集已成功存储在 intersection_set 中。

最后,退出 Redis CLI:

exit

在这一步中,你已经学习了如何使用 SINTERSTORE 命令将交集操作的结果存储到一个新的集合中。这允许你在后续操作中重用交集的结果,而无需重新计算它。

总结

在这个实验(Lab)中,你学习了如何使用 SADD 命令向 Redis 集合(set)添加元素。Redis 集合是唯一字符串的无序集合,这意味着每个元素都必须是唯一的,并且不保留顺序。

SADD 命令向集合添加一个或多个成员,忽略重复项。本实验演示了如何向集合添加元素,观察指示已添加元素数量的返回值,并使用 SMEMBERS 验证集合的内容。由于集合的无序性,SMEMBERS 的输出顺序可能与插入顺序不同。你还学习了如何使用 SUNION 计算集合的并集(union),使用 SINTER 查找公共元素,使用 SDIFF 识别集合之间的差异,以及使用 SINTERSTORE 存储集合操作的结果以供以后使用。请记住在每个步骤之后退出 redis-cli,以确保你的命令被记录。