在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*中定義的局部變量,每次都是新的變量
除此之外,還可能存在跨進程共享數據的需求,這種情況需要共享內存或者其他進程間通信的方法