使用关联数组计算 Lua 的总值数量

我想要统计每个 Redis 键的数据类型,我写了以下代码,但是出现了错误,怎么修复呢?

local detail = {}
detail.hash = 0
detail.set = 0
detail.string = 0

local match = redis.call('KEYS','*')

for i,v in ipairs(match) do
     local val = redis.call('TYPE',v)
     detail.val = detail.val + 1
end

return detail

(error) ERR Error running script (call to f_29ae9e57b4b82e2ae1d5020e418f04fcc98ebef4): @user_script:10: user_script:10: attempt to perform arithmetic on field 'val' (a nil value)

点赞
用户2858170
用户2858170

问题 a)

出现错误是因为 detail.val 为空。这意味着键名 "val" 的表值不存在。因此,您不能进行任何算术运算操作。

detail.val 是语法糖,相当于 detail["val"]。因此,如果您希望 val 是一个字符串,使用它作为表键的正确方式是 detail[val]

可能的问题 b)

做了快速的调研后,我发现这个 redis 调用可能返回一个表,而不是一个字符串。因此,如果 detail[val] 不起作用,检查 val 的类型。

2019-04-01 07:40:03