我想用'hget‘命令汇总每月的键值。
测试集) hmset SiteID:TotalCnt 20180101 10 20180102 2 20180103 5 20180120 10 20180131 30 20180205 20 20180210 5
我想总结一下键值为2018.01,所以我做到了..
sumkey.lua
local mon = ARGV[1]
local sumkey = 0
local forkey = ''
for i = 1,31 do
if i < 10 then local dd = '0' .. tostring(i)
else dd = tostring(i)
end
forkey = mon .. dd
sumkey = sumkey + redis.call('hget' , KEYS[1] , forkey)
end
return sumkey
ubuntu@:~$ redis-cli -n 2 --eval sumkey.lua (错误) ERR运行脚本时出错(调用f_1c9d9d311f9c1e2fbb34fa81176539ad45da3b5b):@enable_strict_lua:15: user_script:8:脚本试图访问不存在的全局变量'dd‘
tostring不起作用。!
如何汇总key的值?
发布于 2018-01-25 18:30:12
尝试在循环之前声明它(dd
)。问题是,如果不满足if
语句,则未定义dd
变量,因此它会尝试查找具有此名称的全局变量。
发布于 2018-01-26 01:12:37
你必须在if ... then
分支之前“本地化”该变量,否则它只会在该分支中保持“可见”,并且在离开该分支之后,该值将恢复到之前的状态:
local dd
if i < 10 then dd = '0' .. tostring(i)
else dd = tostring(i)
end
您也可以将其转换为一个表达式:
local dd = i < 10 and '0' .. tostring(i) or tostring(i)
或者使用format
forkey = mon .. ("%02d"):format(i)
发布于 2018-01-26 09:28:08
我做到了。
见下文。
:sumkey.lua
local key, mon = KEYS[1], ARGV[1]
local subkey
local sumkey, keyval= 0
for i = 1,31 do
if i < 10 then subkey = mon .. '0' .. tostring(i)
else subkey = mon .. tostring(i)
end
keyval = tonumber(redis.call('hget',KEYS[1],subkey))
if keyval ~= nil then
sumkey = sumkey + keyval
end
end
return sumkey
ubuntu@$ redis-cli -n 2 --eval sumkey.lua站点57 :TotalCnt,'201801‘(整数)57
祝大家今天过得愉快~~!
https://stackoverflow.com/questions/48440596
复制相似问题