序
最近的一个项目里面使用了一点点openresty,记录一下其中的lua要点
实现一个“类”
实现方法
-- 文件名字就是模块的名字
local _M = {}
local mt = {__index = _M}
function _M.new(self)
-- 类似于构造函数
end
local function local_func(param)
-- 类似于私有方法
end
return _M
还有一个简单的方法
module(...)
使用方法
local one_class = require "module_name"
缓存
后端连接了数据库,需要openresty缓存数据,减轻后端压力。实现的方法很多,可以使用memcache,redis等。这次的项目很小,不想引入多于的外部依赖。所以就使用了openresty内部的缓存功能。缓存分为两种,一种是worker内缓存,另外一种就是worker间缓存。
worker内缓存
worker内缓存使用了openresty lua虚拟机的机制,因为一个worker一个虚拟机沙箱环境。同时在一个worker中一个模块只会被加载一次。所以使用模块来完成一个worker内的缓存
local _M = {}
lcoal data = {}
function _M.set_data(self, param)
-- 设置缓存的逻辑,将数据保存在 data 这个 table 里
end
function _M.get_data(self, param)
-- 从 data 中获取数据
end
return _M
worker间共享缓存
这个直接使用 openresty 提供的 lua_shared_dict
即可。
- 在 nginx.conf 中
lua_shared_dict my_dict 100m; # 指定了词典的大小
- 在 lua 中
local dict = ngx.shard.my_dict;
具体的操作方法参考:
https://github.com/openresty/lua-nginx-module#ngxshareddict