Redis 集合

Redis集合简介

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

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

基本命令

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

查看完整的设置命令列表

示例

  • Store the sets of bikes racing in France and the USA. Note that if you add a member that already exists, it will be ignored.

  • Check whether bike:1 or bike:2 are racing in the US.

  • Which bikes are competing in both races?

  • How many bikes are racing in France?

Tutorial

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

在这里,我向集合中添加了三个元素,并告诉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数据类型和Redis查询引擎功能。

了解更多

RATE THIS PAGE
Back to top ↑