Redis集(Set)
评论 0
浏览 0
2023-08-12
Redis集(Set)简介
Redis 集(Set)是唯一字符串(成员)的无序集合。你可以使用 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
返回集合的大小(也称为基数)。
请参阅设置命令的完整列表。
性能
大多数集合操作(包括添加、删除以及检查某项是否是集合成员)的复杂度都是 O(1)。
这意味着他们的效率很高。但是,对于具有数十万或更多成员的大型集,您在运行 SMEMBERS
命令时应小心谨慎。
该命令的复杂度为 O(n),并在单个响应中返回整个集合。作为替代方案,请考虑使用 SSCAN
,它允许您迭代地检索集合的所有成员。
备择方案
对大型数据集(或流数据)上的集合成员校验会占用大量内存。如果你担心内存占用,又不需要完美的精度,可以考虑用 Bloom 过滤器或 Cuckoo 过滤器 来替代集合。
Redis 集经常用作一种索引。 如果您需要索引和查询数据,请考虑 RediSearch 和 RedisJSON。
了解更多
- Redis Sets Explained和Redis Sets Elaborated 是两个简短但全面的视频讲解,涵盖了 Redis 集。
- Redis 大学的 RU101 详细探讨了 Redis 集。
0 个评论