lua-limit 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
lua-limit 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 MIT
开发语言 Lua
操作系统 跨平台
软件类型 开源软件
所属分类 管理和监控性能优化
开发厂商
地区 国产
提 交 者 海米
适用人群 未知
收录时间 2019-08-22

软件简介

lua-limit 是一个 OpenRestry Lua 限流工具,支持令牌桶限流、cookie 限流、日期范围限流、概率限流。

1. 思路

限流脚本的设计思路源于规则链,用户请求进入 nginx 后,请求会进入限流脚本配置的限流链,在链中的规则中逐个匹配处理,如果某条限流规则匹配此请求,那么将跳出规则链执行循环,返回被限流信息,除非此规则明确说明需要参考链中下一条规则。

2. 流控工具使用

需要编写限流脚本,脚本可以参考如下(some_business_limit.lua):

    local conf = {
        redis = {...}
        some_limit_rule_1 = {...}
        some_limit_rule_2 = {...}
    }

    -- 如果不传 conf 那么会在 package.path 中寻找
    -- limit_conf.lua 文件
    local limit = require "limit":new(conf)
    funciton some_who_1(limit) 
        return true, "some_limit_rule_1"
    end

    function some_who_2(limit)
        local redis = limit:get_redis()
        -- some_redis_operation
        -- target find 

        if is_target then
            return true, "some_limit_rule_2"
        else
            return false
        end 
    end

    function some_message(limit, data)
        -- 返回页面
        limit.send_redirect("limit.html")

        -- 返回json
        limit.send_redirect("xxx.html", data)
    end

    limit:who({some_who_1, some_who_2}):execute()

在 nginx 的 http 块中配置 package.path 是的 lua 解释器可以找到脚本文件,在需要限流的 location 部分增加 access_by_lua_file指定 lua 脚本(当然也可以使用content_by_lua),如:

    http {
        lua_package_path "/some_place/limit/limit-common/?.lua;;";

        server {
            location /some_url {
                access_by_lua_file /some_place/some_business_limit.lua;
            }
        }
    } 
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2018/08/07 09:12

mysql分页 limit,limit offset

limit: SELECT keyword FROM keyword_rank WHERE advertiserid='59' ORDER BY keyword LIMIT 2 ,1; limit后面是从第2条开始读,读取1条信息; SELECT keyword FROM keyword_rank WHERE advertiserid='59' order by keyword LIMIT 2 OFFSET 1; limit后面跟的是2条数据,offset后面是从第1条开始读取...

0
0
发表了博客
2019/12/15 16:13

【MySQL】LIMIT以及LIMIT OFFSET

LIMIT两种方法: 1 两种方法: 2 (1)LIMIT A; 3 #表示从第一条记录开始取A条记录; 4 5 (2)LIMIT A,B; 6 #参数A为可选参数,表示跳过A条数据(默认为0) 7 #参数B为必选参数,表示取B行数据; 8 9 eg1: 10 SELECT * FROM table LIMIT 5; //检索前 5 个记录行 11 等价于 12 SELECT * FROM table LIMIT 0,5...

0
0
发表了博客
2018/08/23 00:07

lua:lua面向对象

lua中可以通过修改元表元方法来实现面向对象。 而table中的self相当于this。 lua中的table就是一种对象。 首先,table与对象一样可以拥有状态。 其次,table也与对象一样拥有一个独立于其值的标识(一个self)。 最后,table与对象一样具有独立于创建者和创建地的生命周期。 function Account:withdraw(v) self.bal...

0
0
发表了博客
2018/10/11 12:24

关于limit_req和limit_conn的区别

1,首先,limit_req和limit_conn两个模块都是为了来限流的,但是两者不在一个层面,为了搞清楚这个,必须先要弄清楚request和connection的区别,因为在很多情况下,我们把他们混淆了。 so, what is the difference between connection and request? 2, connection是连接,即常说的tcp连接,通过三次握手而建立的一个完整...

0
0
发表了博客
2018/07/30 13:33

SQL limit

employee 表 id name gender hire_date salary performance manage deparmant 1001 张三 男 2/12/1991 00:00:00 2000 200 500 营销部 1002 李四 男 5/8/1993 00:00:00 4000 500 营销部 1003 王五 女 12/13/1993 00:00:00 1000 100 5000 研发部 1004 赵六 男 8/19/1996 00:00:00 8000 1000 4000 财务部 1005 孙七 女 11/6...

0
0
发表了博客
2014/05/15 09:39

limit的优化

MySQL的优化是非常重要的。其他最常用也最需要优化的就是limit。MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。 同样是取10条数据   select * from yanxue8_visit limit 10000,10 和   select * from yanxue8_visit limit 0,10   就不是一个数量级别的。   网上也很多关于l...

1
8
发表于数据库专区
2018/04/19 12:02

mysql-limit

东拼西凑

0
0
发表于数据库专区
2014/08/29 10:08

LIMIT 和 OFFSET

limit和offset使用方法及注意事项

0
0
发表了博客
2018/04/08 11:15

limit小结

1. Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。 2. 初始记录行的偏移量是 0(而不是 1): mysql> SELECT * FROM table LIMIT 5,10; //检索记录行6-15 3. 为了检索从某一个偏移量到记录集的结束所有的记录行,...

0
0
发表了博客
2014/03/23 00:49

Lua之Lua安装与Lua变量-TTLSA(一)

公司业务有用到Lua,与nginx结合起来实现高性能的web应用,想去弄懂这方面的知识,就去了解学习了下Lua,欢迎大咔们指教。 1. Lua介绍 Lua是一门简单的编程语言,它的优势在于可以整合C++的模块来扩展自身的功能,使用数百行或更少的代码来解决复杂的问题。具有的特征有: 1.1. 可扩展性:Lua从一开始就被设计成易于扩展...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
8 收藏
分享
返回顶部
顶部