前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式限流之Nginx+Lua实现

分布式限流之Nginx+Lua实现

原创
作者头像
后端老鸟
修改2020-05-06 15:40:45
9260
修改2020-05-06 15:40:45
举报
文章被收录于专栏:服务端技术服务端技术

【转载请注明出处】:https://cloud.tencent.com/developer/article/1623231

Lua 代码:

代码语言:txt
复制
local locks = require "resty.lock"

local function acquire()
    local lock =locks:new("locks")
    local elapsed, err =lock:lock("limit_key") --互斥锁
    local limit_counter =ngx.shared.limit_counter --计数器

    local key = "ip:" ..os.time()
    local limit = 5 --限流大小
    local current =limit_counter:get(key)

    if current ~= nil and current + 1> limit then --如果超出限流大小
       lock:unlock()
       return 0
    end
    if current == nil then
       limit_counter:set(key, 1, 1) --第一次需要设置过期时间,设置key的值为1,过期时间为1秒
    else
        limit_counter:incr(key, 1) --第二次开始加1即可
    end
    lock:unlock()
    return 1
end
ngx.print(acquire())

Nginx

代码语言:txt
复制
http {

    ……
    lua_shared_dict locks 10m;
    lua_shared_dict limit_counter 10m;

}

【转载请注明出处】:https://cloud.tencent.com/developer/article/1623231

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档