Redis中高效的索引类型操作

Redis中高效的索引类型操作,redis,Redis,我试图在Redis中创建一组索引,用于执行和操作 像这样: inx:haircolor:blonde=set(键1、键2、键3) inx:eyecolor:blue=设置(键1、键2) 我可以使用sinter查找所有金发碧眼的钥匙 我有这样的散列: 关键字1:name=Rick haircolor=金发眼颜色=蓝色 获取结果键并检索匹配哈希的最快方法是什么 这只是演示数据,让它更容易理解,我用它来存储分析,我需要做一些大的关键查找集 我能想到的两个选项是管道化multi-get+exec 或者使

我试图在Redis中创建一组索引,用于执行和操作

像这样:

inx:haircolor:blonde=set(键1、键2、键3)
inx:eyecolor:blue=设置(键1、键2)

我可以使用
sinter
查找所有金发碧眼的钥匙

我有这样的散列:

关键字1:name=Rick haircolor=金发眼颜色=蓝色

获取结果键并检索匹配哈希的最快方法是什么

这只是演示数据,让它更容易理解,我用它来存储分析,我需要做一些大的关键查找集

我能想到的两个选项是管道化multi-get+exec 或者使用Lua脚本来避免通过网络发送一串密钥

如果有更好的方法来存储对象数据,并对其进行索引,或者有一种有效的方法来提取所有这些散列,而无需通过网络发送一堆id。。。请告诉我

编辑

我最终使用了LUA脚本(使用redis脚本分支)

local fkeys=redis.call('sinter',unpack(键))
局部r={}
对于i,输入ipair(fkeys)do
r[#r+1]=redis.call('hgetall',key)
结束
返回r

它将所有处理都保留在数据库端。

获取键列表,然后采取措施获取值几乎是处理此问题的唯一方法。对于实验性的Lua脚本来说,它看起来确实是一个很好的用例,尽管即使没有它,您也可能相当有效地获得密钥——在您看到真正的性能问题之前,这些数字需要非常大

您可能还可以进行其他优化,可能使用临时或排序集,或者仅从每个哈希中检索单个相关属性,但这些优化高度依赖于您尝试检索的数据类型