一机多用 - Redis

use*_*_ab 7 lua redis jedis

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

假设我已经设置name_last为贝克汉姆和name_first大卫。应LUA脚本是为了同时获得什么name_last,并name_first一气呵成?

我可以实现类似的东西:

eval "return redis.call('get',KEYS[1])" 1 foo
Run Code Online (Sandbox Code Playgroud)

获取单个键的值。只是想知道如何通过调用 redis server来增强该脚本部分以获取与所有键(或多个键)相关的值

use*_*450 6

首先,您想要将要返回的字段发送给EVAL0表示没有KEYS,因此可以从 访问这些参数ARGV):

eval "..." 0 name_last name_first
Run Code Online (Sandbox Code Playgroud)

其次,您可以使用MGET查询各个字段的值:

local values = redis.call('MGET', unpack(ARGV))
Run Code Online (Sandbox Code Playgroud)

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

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

您最终将执行的命令是:

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
Run Code Online (Sandbox Code Playgroud)