【问题标题】:Efficient index type operations in RedisRedis 中高效的索引类型操作
【发布时间】: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


    【解决方案1】:

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

    您可能还可以进行其他优化,可能使用临时集或排序集,或者仅从每个哈希中检索一个相关属性,但这些在很大程度上取决于您尝试检索的数据类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-03
      • 2018-09-16
      • 2021-07-03
      • 2016-07-27
      • 2015-03-08
      • 2022-01-13
      • 2018-06-10
      • 2011-02-21
      相关资源
      最近更新 更多