【发布时间】:2013-08-20 04:48:39
【问题描述】:
我正在尝试在 Redis 中创建一组索引,用于执行 AND 操作。
像这样:
inx:haircolor:blonde = set(key1,key2,key3)
inx:eyecolor:blue = set(key1,key2)
我可以使用sinter 找到所有金色头发和蓝色眼睛的钥匙。
我有这样的哈希:
key1: name=Rick haircolor=blonde eyecolor=blue
获取结果键并检索匹配哈希的最快方法是什么。
这只是演示数据,以便更容易理解,我正在使用它来存储分析,我需要进行一些大型的键查找。
我能想到的 2 个选项是流水线化 multi gets + 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
这将所有处理都保留在数据库端。
【问题讨论】:
标签: redis