Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/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以满足我的特定需求,但我不知道如何才能实现我的需求 我想存储整数集(每组100个低千个条目),然后通过输入集进行“查询”。包含查询中所有元素的所有集合都应匹配。(SDIFF查询键应返回空集,然后迭代所有键) < >我不知道如何高效地完成(每10K键大约5毫秒)? 如果您只使用整数查询数据,请考虑使用整数作为密钥进行存储。而不是: SADD a 3 5 SADD b 3 7 你可以: SADD int:3 a SADD int:5 a SADD int:3 b SADD in

我正在研究redis以满足我的特定需求,但我不知道如何才能实现我的需求

我想存储整数集(每组100个低千个条目),然后通过输入集进行“查询”。包含查询中所有元素的所有集合都应匹配。(
SDIFF查询键
应返回空集,然后迭代所有键)


< >我不知道如何高效地完成(每10K键大约5毫秒)?

如果您只使用整数查询数据,请考虑使用整数作为密钥进行存储。而不是:

SADD a 3 5
SADD b 3 7
你可以:

SADD int:3 a
SADD int:5 a
SADD int:3 b
SADD int:7 b
然后使用
SINTER int:3 int:7…
获取所有匹配的整数集名称(最初用于键的名称)

如果您确实需要双向查询,那么您可能需要同时进行这两种查询。这就像是在做一件事

在这里,您需要权衡插入时间和内存使用情况,以获得快速查询性能。每次添加对时,都需要同时添加SADD:
SADD setName int
SADD prefix:int setName

如果这个额外的内存和插入工作在您的案例中不是一个选项,那么您的下一个选项是使用Lua脚本循环键(模式匹配您的集合名称),并使用
SISMEMBER
测试查询的整数。有关使用Lua循环一组关键点的示例,请参见


Lua脚本就像一个存储过程,它将在Redis服务器上以原子方式运行。但是,对于多个整数成员测试的10k集合,它是否会给出5ms的执行时间还有待观察。

您能否提供您已经尝试过的内容的详细信息以及如何对其进行优化?这符合预期,因此被标记为可接受答案。然而,性能远远不是每5毫秒10公里(由于涉及网络,这是一种预期的性能,更像是每10公里1秒钟)。对于测试集,它的速度是在弹性搜索中执行类似操作的两倍。然而,考虑到烧结矿的时间复杂性(O(N*M))的描述,我确信这不会扩大。