lock.lua
local rety_lock = require "resty.lock"
local cache = ngx.shared.my_cache
local key = ngx.re.match(ngx.var.request_uri,"/([0-9]+).html")
if type(key) == "table" then
local res,err = cache:get(key[1])
if res then
ngx.say('val res')
return
end
local lock,err = rety_lock:new("my_locks",{exptime=10,timeout=1})
if not lock then
ngx.log(ngx.ERR,'--------------new lock err')
end
local flag_lock,err = lock:lock(key[1])
if err then
ngx.log(ngx.ERR,'--------------lock err')
end
if not flag_lock then
local res = cache:get_stale(key[1])
return res
end
local res,err = cache:get(key[1])
if res then
lock:unlock()
return res
end
--ngx.sleep(2)
local req_data
local method = ngx.var.request.method
if method == "POST" then
req_data = {method=ngx.HTTP_POST, body=ngx.req.read_body()}
elseif method == "PUT" then
req_data = {method=ngx.HTTP_PUT, body=ngx.req.read_body()}
else
req_data = {method=ngx.HTTP_GET}
end
local res,err = ngx.location.capture(
'index.php',
req_data
)
if res.status == 200 then
ngx.say(res.body)
end
lock:unlock()
end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了