Redis 集合

Redis 集合简介

Redis 集合是唯一字符串(成员)的无序集合。您可以使用 Redis 集合来有效地

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

基本命令

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

查看完整的集合命令列表

示例

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

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

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

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

教程

The SADD command adds new elements to a set. It's also possible to do a number of other operations against sets like testing if a given element already exists, performing the intersection, union or difference between multiple sets, and so forth.

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

Redis 有命令可以测试集合成员资格。这些命令可以用于单个项目和多个项目。

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

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

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

当您要从集合中删除项目时,可以使用 SREM 命令从集合中删除一个或多个项目,或者可以使用 SPOP 命令从集合中删除一个随机项目。您还可以使用 SRANDMEMBER 命令从集合中返回一个随机项目,而不会删除它。

限制

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

性能

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

替代方案

大型数据集(或流式数据)上的集合成员资格检查可能会使用大量内存。如果您担心内存使用情况并且不需要完全精确,请考虑使用 布隆过滤器或布谷鸟过滤器 作为集合的替代方案。

Redis 集合通常用作索引的一种。如果您需要索引和查询数据,请考虑使用 JSON 数据类型和 搜索和查询 功能。

了解更多

RATE THIS PAGE
Back to top ↑