# Redis Sets

Redis Sets 介绍

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

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

# 例子

  • 存储用户 123 和 456 的收藏书籍 ID 集:
> SADD user:123:favorites 347
(integer) 1
> SADD user:123:favorites 561
(integer) 1
> SADD user:123:favorites 742
(integer) 1
> SADD user:456:favorites 561
(integer) 1
  • 检查用户 123 是否喜欢书籍 742 和 299
> SISMEMBER user:123:favorites 742
(integer) 1
> SISMEMBER user:123:favorites 299
(integer) 0
  • 用户 123 和 456 有共同喜欢的书吗?
> SINTER user:123:favorites user:456:favorites
1) "561"
  • 用户 123 收藏了多少本书?
> SCARD user:123:favorites
(integer) 3

# 限制

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

# 基本命令

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

请参阅 set 命令的完整列表

# 表现

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

# 备择方案

对大型数据集(或流数据)设置成员资格检查会占用大量内存。如果您担心内存使用并且不需要完美的精度,请考虑使用 Bloom 过滤器或 Cuckoo 过滤器 作为集合的替代方案。

Redis 集合经常被用作一种索引。如果您需要索引和查询数据,请考虑 RediSearch](https://redis.io/docs/stack/search)RedisJSON

# 学到更多

  • Redis Sets ExplainedRedis Sets Elaborated 是两个简短但全面的视频解释器,涵盖 Redis 集。
  • Redis 大学的 RU101 详细探索了 Redis 集。
Last Updated: 5/25/2023, 2:35:11 PM