多管齐下——Redis

Multiple-get in one go - Redis

我们如何使用lua脚本来实现multi-get。

假设我将 name_last 设置为 Beckham,将 name_first 设置为 David。 lua 脚本应该是什么才能同时获得 name_lastname_first

我可以实现类似的东西:

eval "return redis.call('get',KEYS[1])" 1 foo

获取单键值。只是想知道如何通过调用 redis 服务器 .

来增强该脚本部分以 获取与所有键(或多个键)相关的值

对 KEYS table 进行循环,并在您 return 中为每个存储其 GET 响应。未经测试的代码:

local t = {}
for _, k in pairs(KEYS) do
  t[#t+1] = redis.call('GET', k)
end
return t

P.S。您也可以使用 MGET 代替 btw :)

首先,您想将要 return 的字段发送到 EVAL0 表示没有 KEYS,因此可以访问这些参数来自 ARGV):

eval "..." 0 name_last name_first

其次,您可以使用 MGET:

查询各个字段的值
local values = redis.call('MGET', unpack(ARGV))

第三,可以将值映射回字段名(每个的索引对应同一个字段):

local results = {}
for i, key in ipairs(ARGV) do
  results[key] = values[i]
end
return results

您最终要执行的命令是:

eval "local values = redis.call('MGET', unpack(ARGV)); local results = {}; for i, key in ipairs(ARGV) do results[key] = values[i] end; return results" 0 name_last name_first