我正在尝试在Redis中创建一组索引,用于进行AND操作。
像这样:
inx:haircolor:blonde = set(key1,key2,key3)
inx:eyecolor:blue = set(key1,key2)
然后我可以使用 sinter
找到所有具有金发和蓝眼睛的关键字。
我有以下这种哈希表:
key1: name=Rick haircolor=blonde eyecolor=blue
最快的方法是什么,以便获取匹配的哈希表?
这只是演示数据,以使理解更容易。我使用它来存储分析数据,并且需要执行较大规模的关键字查找。
我能想到的两个选择是:管道化多个 get + exec 或者使用Lua脚本避免发送一堆键。
如果有更好的存储对象数据并对其进行索引的方法,或者一种有效的获取所有这些哈希表而不会向网络发送一堆id的方法,请告诉我!
编辑
我最终使用了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
它将所有处理工作保持在数据库端。