我们如何使用lua脚本来实现multi-get。
假设我将name_last
设置为Beckham,将name_first
设置为David。为了同时获得name_last
和name_first
,lua脚本应该是什么?
我可以实现类似的东西:
eval "return redis.call('get',KEYS[1])" 1 foo
获取单个键的值。只是想知道如何通过只调用一次redis服务器来增强脚本部分以获取与所有键(或多个键)相关的值。
首先,你想要发送你想要返回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
在KEYS表上循环,并为每个商店执行其返回的GET响应。未经测试的代码:
local t = {}
for _, k in pairs(KEYS) do
t[#t+1] = redis.call('GET', k)
end
return t
附:你也可以使用MGET
代替btw :)