Redis Set

Redis Set 简介

Redis Set 是一个无序的、包含唯一字符串(成员)的集合。您可以高效地使用 Redis Set 来

  • 追踪唯一项(例如,追踪访问给定博客文章的所有唯一 IP 地址)。
  • 表示关系(例如,拥有给定角色的所有用户集合)。
  • 执行常见的集合操作,例如交集、并集和差集。

基本命令

  • SADD 命令向集合添加新成员。
  • SREM 命令从集合中移除指定成员。
  • SISMEMBER 命令测试字符串是否为集合成员。
  • SINTER 命令返回两个或多个集合共有的成员集合(即交集)。
  • SCARD 命令返回集合的大小(也称基数)。

查看 完整的 Set 命令列表

示例

  • 存储在法国和美国比赛的自行车集合。请注意,如果您添加已存在的成员,该成员将被忽略。

  • 检查 bike:1 或 bike:2 是否在美国比赛。

  • 哪些自行车在两场比赛中都参赛?

  • 有多少辆自行车在法国比赛?

教程

SADD 命令向集合添加新元素。还可以对集合执行许多其他操作,例如测试给定元素是否存在、计算多个集合的交集、并集或差集等等。

这里我向我的集合添加了三个元素,并告诉 Redis 返回所有元素。集合没有顺序保证。Redis 可以自由地在每次调用时以任何顺序返回元素。

Redis 提供了用于测试集合成员资格的命令。这些命令可以用于单个项目,也可以用于多个项目

我们还可以找到两个集合之间的差集。例如,我们可能想知道哪些自行车在法国比赛但不在美国比赛

还有其他一些非平凡操作,使用正确的 Redis 命令仍然很容易实现。例如,我们可能想要一个在法国、美国和其他一些比赛中参赛的所有自行车的列表。我们可以使用 SINTER 命令来做到这一点,该命令执行不同集合之间的交集操作。除了交集,您还可以执行并集、差集等操作。例如,如果我们添加第三场比赛,我们可以看到其中一些命令的实际应用

您会注意到,当所有集合之间的差集为空时,SDIFF 命令会返回一个空数组。您还会注意到,传递给 SDIFF 命令的集合顺序很重要,因为差集是非交换性的。

当您想从集合中移除项目时,可以使用 SREM 命令移除集合中的一个或多个项目,或者使用 SPOP 命令从集合中移除一个随机项目。您还可以使用 SRANDMEMBER 命令返回集合中的一个随机项目而不将其移除

限制

Redis Set 的最大大小是 2^32 - 1 (4,294,967,295) 个成员。

性能

大多数 Set 操作,包括添加、移除和检查项目是否为集合成员,都是 O(1) 的。这意味着它们非常高效。然而,对于包含数十万甚至更多成员的大型集合,在运行 SMEMBERS 命令时应谨慎。此命令是 O(n) 的,并在单个响应中返回整个集合。作为替代方案,请考虑使用 SSCAN 命令,它允许您迭代地检索集合的所有成员。

替代方案

在大型数据集(或流式数据)上进行集合成员资格检查可能会占用大量内存。如果您担心内存使用且不需要完美精度,可以考虑使用 布隆过滤器或布谷鸟过滤器 作为 Set 的替代方案。

Redis Set 经常被用作一种索引。如果您需要索引和查询数据,可以考虑使用 JSON 数据类型Redis 查询引擎 功能。

了解更多

评价此页面
返回顶部 ↑