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 集经常用作一种索引。 如果您需要索引和查询数据,请考虑 RediSearchRedisJSON

了解更多

最后更新2023-09-03
0 个评论
上一篇: Redis 列表
下一篇: Redis 哈希