-
EVAL
yêu cầu tối thiểu hai đối số; tập lệnh và số khóa bạn đang chuyển cho tập lệnh. Trong trường hợp này, bạn đang chuyển 0 khóa, nghĩa là tập lệnh có thể được gọi như sau:redis-cli EVAL "$(cat sum.lua)" 0
hoặc:
redis-cli --eval sum.lua
-
Cấu trúc vòng lặp của bạn để lặp lại các giá trị được trả về từ
KEYS
đã sai; Tôi đã sửa nó cho bạn. -
Bạn cần chuyển đổi giá trị trả về từ
GET
từ một chuỗi thành một số bằng cách sử dụngtonumber
của Lua chức năng.
Với những thay đổi ở trên được thực hiện, tập lệnh sau sẽ phù hợp với bạn:
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