大体思路: 通过nginx + lua (openresty) 的方式执行lua获取动态效果
0、环境搭建
https://openresty.org/en/linux-packages.html
1、ngxin配置:
|
|
2、filecache.lua 脚本
-- 读文件
-- 参数:需要读取的文件路径
-- 返回值:读出的内容,读取错误。
-- 如果没有读出内容,第一个参数为 nil,否则第二个参数为 nil
local function read_file(file_name)
if not file_name then
return nil, "missing file_name"
end
local file = io.open(file_name,'r')
if not file then
return nil, "can\'t open file \"" .. file_name .. "\""
end
local content = file:read('*all')
file:close()
return content, nil
end
-- 写文件
-- 参数:需要写入的文件路径,写入内容
-- 返回值:写入结果
-- 如果没有写入内容,返回错误内容,否则返回 nil
local function write_file(file_name, content)
if not file_name then
return nil, "missing file_name"
end
content = content or ''
local file = io.open(file_name, "a")
if not file then
return "can\'t open file \"" .. file_name .. "\""
end
file:write(content)
file:close()
return nil
end
-- 获取缓存
function get_from_cache(key)
local cache_ngx = ngx.shared.my_cache
local value = cache_ngx:get(key)
return value
end
-- 设置缓存
function set_to_cache(key,value,exptime)
if not exptime then
exptime = 60
end
local cache_ngx = ngx.shared.my_cache
local succ,err,forcible = cache_ngx:set(key, value,exptime)
return succ
end
-- 入口程序
local args = ngx.req.get_uri_args()
local id = args["id"]
local item_model = get_from_cache("item_"..id)
if item_model == nil then
local content, err = read_file("/root/geektime/lua/1.png")
if not content then
end
item_model = content
set_to_cache("item_"..id, item_model, 60)
end
3、待优化项
还没写根据具体的id请求目标图片地址,直接读取本地磁盘的图片作为图片源,时间关系请各位补充。
其他:
启动命令
openresty -p `pwd` -c conf/nginx.conf -s reload
调试过程日志
tail -100f logs/error.log
本文介绍如何使用Nginx结合Lua脚本(OpenResty)实现动态文件缓存,包括环境搭建、Nginx配置、Lua脚本编写及缓存操作。通过示例展示了读取、写入文件及缓存的增删查,适用于提高Web服务器响应速度和减少资源消耗。

753

被折叠的 条评论
为什么被折叠?



