Openresty的Lua定时器(计划任务)
在系统中有一类需求是:周期性的执行某些任务,利用定时的timer去实现这种操作。
Openresty为Lua提供了这种机制实现的API,通过设定timer来完成这种类似计划任务功能。
下面,就是一个典型的Openresty的timer API的使用例子:
实现思路是,通过一个timer设定调用一个函数,在函数内部还有一个循环递归的timer调用,调用函数自身,实现周期性的函数执行。
–此函数的主要的目的是6秒钟的时间,对redis中某Key,进行数值累加。
local handler
function handler(premature, params)
--定时执行一个redis的累加计数操作。
RedisCommon.add()
--递归的timer,重复调用handler函数。
local ok, err = ngx.timer.at(6, handler, "params-data")
ngx.log(ngx.DEBUG, "ok:", ok, " err:", err)
end
–第一次设定timer,调用hander函数。
local ok, err = ngx.timer.at(6, handler, "params-data")
ngx.log(ngx.DEBUG, "ok:", ok, " err:", err)
if not ok then
ngx.log(ngx.ERR, "err:", err)
end
timer一般用于,定时去服务器上取一些数据,或是定时扫描本地文件是否有变动,根据目地不同功能也不一样。
作者:糖果
PS:转载到其它平台请注明作者姓名及原文链接,请勿用于商业用途。