Redis Sets
Redis 介绍
Redis Sets是唯一字符串(成员)的无序集合,你可以使用Redis有效的进行以下三种场景
1、跟踪唯一项目(例如跟踪方位给定博客文档的所有唯一IP地址)
2、表示关系(例如,具有给定角色的所有用户的集合)
3、执行常见的集合操作,如交集、并集和差集。
例1:
为用户123 和456 存储一组喜爱的图书ID
SADD user:123:favorites 347
SADD user:123:favorites 561
SADD user:123:favorites 742
SADD user:456:favorites 561
检查用户123 是否喜欢742 和299
SISMEMBER user:123:favorites 742
SISMEMBER user:123:favorites 299
用户123 和456 共同喜欢的书籍
SINTER user:123:favorites user:456:favorites
用户123收藏了多少本书
SCARD user:123:favorites
限制
1<<32 -1
基本命令
SADD adds a new member to a set. 往set中添加一个新的成员
SREM removes the specified member from the set. 删除某个key 中的set 成员
SISMEMBER tests a string for set membership. 测试字符串的在哪些key 中存在
SINTER returns the set of members that two or more sets have in common (i.e., the intersection). 返回多个key 他们的set 的交集
SCARD returns the size (a.k.a. cardinality) of a set. 查询某个key 的set 大小
性能
大多数集合操作,包括添加、删除和检查项目是否为集合成员,都是O(1),意味着他们的效率很高。但是对于,具有数十万或者更多成员的大型集合,在运行SMEMBERS命令时应该格外小心,此命令为O(n),并在单个相应中返回整个集合。另外一种选择是考虑SSCAN,它运行您迭代地检索集合的所有成员。
选择
在大型数据集(或者流式数据集)上设置成员身份检查可能会占用大量的内存,如果你担心内存使用,并且不需要完美的精度,可以考虑使用Bloom过滤器或者Cuckoo 过滤器作为一个集合的替代方案。
Redis 集合经常被用作一种索引。如果您需要查询索引和查询数据,请考虑RedisSearch 和RedisJson