我正在尝试在 Redis 中创建一组索引,用于执行 AND 操作。
像这样:
inx:头发颜色:金发 = set(key1,key2,key3)
inx:眼睛颜色:蓝色 = 设置(key1,key2)
我可以使用sinter
找到所有金发蓝眼睛的钥匙。
我有这样的哈希:
key1:姓名=瑞克 头发颜色=金发 眼睛颜色=蓝色
获取结果密钥并检索匹配哈希值的最快方法是什么?
这只是演示数据,以便更容易理解,我使用它来存储分析,并且我需要进行一些大型的关键查找。
我能想到的两个选项是管道化多重获取+执行
或者使用 Lua 脚本来避免通过网络发送一堆密钥。
如果有更好的方法来存储对象数据并为其建立索引,或者有一种有效的方法来提取所有这些哈希值,而无需通过网络发送一堆 id...请填写!
Edit
我最终使用了 LUA 脚本(使用 redis 脚本分支)
local fkeys = redis.call('sinter', unpack(KEYS))
local r = {}
for i, key in ipairs(fkeys) do
r[#r+1] = redis.call('hgetall',key)
end
return r
这使得所有处理都在数据库端进行。
获取键列表然后执行某些操作来获取值几乎是处理此问题的唯一方法。它看起来确实是实验性 Lua 脚本的一个很好的用例,尽管即使没有它,您也可以相当有效地获取密钥 - 在您看到真正的性能问题之前,数字需要非常大。
您可能可以进行其他优化,可能使用临时集或排序集,或者仅从每个哈希中检索单个相关属性,但这些在很大程度上取决于您尝试检索的数据类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)