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