# 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 Explained
和Redis Sets Elaborated
是两个简短但全面的视频解释器,涵盖 Redis 集。Redis 大学的 RU101
详细探索了 Redis 集。