美文网首页
分布式限流之Nginx+Lua实现

分布式限流之Nginx+Lua实现

作者: 后端老鸟 | 来源:发表于2020-05-03 10:29 被阅读0次

    【转载请注明出处】:https://www.jianshu.com/p/cae825afaf3f

    Lua 代码:

    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

    http {
    
        ……
        lua_shared_dict locks 10m;
        lua_shared_dict limit_counter 10m;
    
    }
    

    【转载请注明出处】: https://www.jianshu.com/p/cae825afaf3f

    相关文章

      网友评论

          本文标题:分布式限流之Nginx+Lua实现

          本文链接:https://www.haomeiwen.com/subject/plhdjqtx.html