Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在redis中有效地合并非重叠集?_Redis_Set - Fatal编程技术网

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

如何在redis中有效地合并非重叠集?,redis,set,Redis,Set,我有一个用例,我知道我在redis商店中实现的一些集合是不相交的。我的一些集合相当大,因此,它们的sunion或sunionstore需要相当长的时间。redis是否提供处理此类联合的功能 或者,如果有一种方法可以将元素添加到Redis中的集合中,而无需在每次插入之前检查其唯一性,则可以解决我的问题。实际上,由于操作的相对成本,不需要这种功能 构建Redis对象(如集合或列表)时,成本不受数据结构管理(哈希表或链表)的支配,因为单个插入操作的摊销复杂性为O(1)。成本主要由所有项目(即集合对象或

我有一个用例,我知道我在redis商店中实现的一些集合是不相交的。我的一些集合相当大,因此,它们的
sunion
sunionstore
需要相当长的时间。redis是否提供处理此类联合的功能


或者,如果有一种方法可以将元素添加到Redis中的集合中,而无需在每次插入之前检查其唯一性,则可以解决我的问题。

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

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

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

要在集合不相交的情况下优化SUNION命令,最好用多个SMEMBERS命令的管道替换它,以检索单个集合(并在客户端构建联合)


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

SUNIONSTORE为O(N),元素总数为N,无论您有多少公共项(要知道它是公共项,您必须阅读它)。你把SINTERSTORE和O(N*M)混合在一起,其中N是最小集合的基数,M是集合的数量。我说的是单个操作的成本。SUNIONSTORE是O(n),因为单个插入的成本是O(1)。我的答案实际上与联合而不是交叉有关。请看这里: