多管齐下——Redis
Multiple-get in one go - Redis
我们如何使用lua脚本来实现multi-get。
假设我将 name_last
设置为 Beckham,将 name_first
设置为 David。 lua 脚本应该是什么才能同时获得 name_last
和 name_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 的字段发送到 EVAL(0
表示没有 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
我们如何使用lua脚本来实现multi-get。
假设我将 name_last
设置为 Beckham,将 name_first
设置为 David。 lua 脚本应该是什么才能同时获得 name_last
和 name_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 的字段发送到 EVAL(0
表示没有 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