如何在nginx中创建异步"cron like"调度程序

Vor*_*Vor 2 cron lua dictionary nginx redis

我需要在nginx服务器内创建一个异步调度程序来更新变量.让我举个例子,我的意思是什么,为什么我需要它.

想象一下看起来像这样的配置文件:

http {
    lua_shared_dict foo 5m;
    server {
        location /set {
            content_by_lua '
                local foo = ngx.shared.foo
                ngx.say(foo:get("12345"))
            ';
        }
    }
}  
Run Code Online (Sandbox Code Playgroud)

我指定foo了驻留在共享内存中的变量,并且所有工作进程都可以访问它.我想要做的是从lua每个minite调用的脚本中设置这些值.仅供参考,它将转到Redis然后检索必要的数据,并更新此变量.我知道我可以content_by_lua在每次通话中都这样做,但对于大量的流量来说效率非常低.

我想要一个单独的过程,每分钟左右就可以触发一个任务.有没有这样的东西nginx或有什么模块可以帮助我吗?

小智 6

您可以使用ngx_lua提供的新ngx.timer API.有关详细信息,请参阅文档

https://www.nginx.com/resources/wiki/modules/lua/#ngx-timer-at

您可以在计时器处理程序中创建一个新计时器,使计时器像cronjob一样保持触发;)

顺便说一下,计时器是每个工作进程,您可以在计时器处理程序中使用lua-resty-lock库,以确保在所有nginx工作程序中一次只有一个计时器处于活动状态:https://github.com/agentzh/LUA-resty锁