Openresty的Lua定时器(计划任务)

663 词

在系统中有一类需求是:周期性的执行某些任务,利用定时的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:转载到其它平台请注明作者姓名及原文链接,请勿用于商业用途。