在OpenResty当中,不同lua脚本中的数据,有的是每个请求有独立的一份,还有的是整个进程上的所有请求共享的
通常情况下,下面所写的,每个请求将会有独立的一份count,因此无论调用此接口多少次,每次都是从0开始的
http {
server {
listen 80;
location / {
content_by_lua_block {
local count = 0
local function inc_count() {
count = count + 1
}
inc_count()
}
}
}
}
而下面的写法,各个请求将会共享count
http {
server {
listen 80;
location / {
content_by_lua_block {
local count_module = require "count_module"
count_module.incr()
}
}
}
}
其中count_module为如下lua脚本
local _M = {
count = 0
}
function _M.incr()
self.count = self.count + 1
end
return _M
上面两种写法有不同的效果,是因为通过require引入模块,每个进程仅会发生一次,然后后续的请求,都共享这一模块
而直接在content_by_lua*中定义的局部变量,每次都是新的变量
除此之外,还可能存在跨进程共享数据的需求,这种情况需要共享内存或者其他进程间通信的方法