Redis的Lua脚本,用于对键的值求和

我正在构建我的第一个Redis服务器端脚本( 用于调试 ),而我缺乏Lua经验使我非常困惑。

本质上来说,我有一个K / V对(包含〜1000个值)的数据集,我想从中列出所有与模式匹配的KEYS。例如在redis-cli中:

> KEYS "carlos:*"

1) "carlos:1"

2) "carlos:2"

3) "carlos:3"

4) "carlos:4"

基于上面的输出,我想通过执行Lua脚本来返回这些键的总和。目前,我有以下内容sum.lua

local sum = 0

local matches = redis.call('KEYS', 'carlos:*')

for unpack(matches)

sum = sum + redis.call('GET', matches)

end

return sum

尽管以上脚本可能不正确,但即使单独尝试也会redis.call('KEYS', 'carlos:*')产生以下错误

root @ carlos:〜#redis-cli EVAL“ $(cat sum.lua)”

(错误)ERR错误的’eval’命令参数数目

我已经尝试了多次语法迭代,但都无济于事。有任何想法吗?

谢谢

回答:

  1. EVAL至少需要两个参数;脚本以及要传递给脚本的键数。在这种情况下,您要传递零键,这意味着可以按以下方式调用脚本:
    redis-cli EVAL "$(cat sum.lua)" 0

要么:

    redis-cli --eval sum.lua

  1. 您迭代返回值的循环结构KEYS不正确;我已经为您修复了。

  2. 您需要GET使用Lua tonumber函数将字符串返回的值转换为数字。

完成上述更改后,以下脚本将为您工作:

local sum = 0

local matches = redis.call('KEYS', 'carlos:*')

for _,key in ipairs(matches) do

local val = redis.call('GET', key)

sum = sum + tonumber(val)

end

return sum

以上是 Redis的Lua脚本,用于对键的值求和 的全部内容, 来源链接: utcz.com/qa/428665.html

回到顶部