如何在redis中有效地结合非重叠集?

时间:2014-12-03 02:27:07

标签: redis set

我有一个用例,我知道我在redis商店中实现的一些集合是不相交的。我的一些设置非常大,因此,sunionsunionstore需要相当长的时间。 redis是否提供处理此类联合的任何功能?

或者,如果有一种方法可以在Redis中添加元素而不检查每次插入前的唯一性,那么它可以解决我的问题。

1 个答案:

答案 0 :(得分:3)

实际上,由于操作的相对成本,不需要这样的功能。

当您构建Redis对象(例如集或列表)时,成本不受数据结构管理(哈希表或链表)的支配,因为单个插入操作的分摊复杂性为O(1)。成本由所有项目(即设置对象或列表对象)的分配和初始化支配。检索这些对象时,成本主要取决于输出缓冲区的分配和格式,而不是数据结构中的访问路径。

因此绕过集合的唯一性属性不会带来显着的优化。

如果集合是不相交的,要优化SUNION命令,最好是用几个SMEMBERS命令的管道替换它来检索各个集合(并在客户端构建联合)。

优化SUNIONSTORE实际上是不可能的,因为不相交的集合是性能最差的情况。性能主要取决于结果项的数量,因此共同项越少,响应时间就越长。