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

Pir*_*ooz 4 set redis

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

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

Did*_*zia 5

实际上,由于操作的相对成本,因此不需要此类功能。

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

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

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

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