lua并发限流代码

本文介绍了如何在Nginx中使用Lua实现并发限流,通过在nginx.conf配置lua_shared_dict,并展示了具体的Lua限流代码,以保障分布式架构下的API服务稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先在nginx.conf 文件中的http节点添加:

lua_shared_dict limit_req_store 10m;

以下是lua并发限流代码:

local limit_req = require "resty.limit.req"

--限制请求速率为500 req/sec
local lim,err = limit_req.new("limit_req_store",5,0)
if not lim then --申请limit_req对象失败
ngx.log(ngx.ERR,"failed to instantiate a resty.limit.req object: ",err)
return ngx.exit(500)
end

-- 下面代码针对每一个单独的请求
-- 使用ip地址作为限流的key
local key = ngx.var.binary_remote_addr
local delay,err = lim:incoming(key,true)
if not delay then
if err == "rejected" then
return ngx.exit(503)
end
ngx.log(ngx.ERR,"failed to limit req: ",err)
return ngx.exit(500)
end


if delay > 0 then
--第二参数(err)保存着超过请求速率的请求数
--例如err等于31,意味着当前速率是 531 req/sec
local excess = err

---- 当前请求超过200 req/sec 但小于 300 req/sec
-- 因此我们sleep一下,保证速率是200 req/sec,请求延迟处理
ngx.sleep(delay) --非阻塞sleep(秒)
end
ngx.say("you success!!!")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸葛本不亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值