[发明专利]一种分布式限流方法有效
申请号: | 202011479920.8 | 申请日: | 2020-12-15 |
公开(公告)号: | CN112637082B | 公开(公告)日: | 2023-03-31 |
发明(设计)人: | 康少雄;江海龙;吴海波;郭倩;李兆楠 | 申请(专利权)人: | 银盛支付服务股份有限公司 |
主分类号: | H04L47/20 | 分类号: | H04L47/20;H04L47/215 |
代理公司: | 深圳市深可信专利代理有限公司 44599 | 代理人: | 刘昌刚 |
地址: | 518000 广东省深圳市龙华*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分布式 限流 方法 | ||
1.一种分布式限流方法,其特征在于:包括以下的步骤:
S1、调用方调用尝试限流tryAcquire方法限流,输入方法入参信息,方法入参信息包括第一限流关键字key、第一限流时间limitTime、第一限流时间内最大限流数limitMax、第一当前获取流量个数acquireNum和第一尝试等待时间tryTimeMills;
S2、使用System.currentTimeMillis()获取当前系统毫秒时间,记为尝试限流开始时间tryStartTime,System.currentTimeMillis()即Java提供的API,其作用是返回毫秒为单位的当前系统时间;
S3、组装限流key;所述步骤S3,包括以下的步骤:
S31、使用System.currentTimeMillis()获取当前系统时间毫秒值,记为当前限流时间curLimitTime;
S32、将第一限流时间limitTime乘以1000,得到第一限流时间limitTime的毫秒值;
S33、使用当前限流时间curLimitTime除以第一限流时间limitTime的毫秒值,得到当前系统时间所属的限流区间值;
S34、使用第一限流关键字key加上当前系统时间所属的限流区间值,得到限流key;
S4、采用Redis执行Lua脚本,获取返回值;
S5、判断获取的返回值是否等于1,当返回值等于1时,则返回true给目标业务,即放行;当返回值不等于1时,则返回false给目标业务,即限流;
所述步骤S5,当返回值不等于1时,使用System.currentTimeMillis()获取当前系统毫秒时间,记为尝试限流结束时间tryEndTime,用尝试限流结束时间tryEndTime减去尝试限流开始时间tryStartTime得到尝试限流总耗时,判断尝试限流总耗时是否小于第一尝试等待时间tryTimeMills,当尝试限流总耗时小于第一尝试等待时间tryTimeMills时,则调用线程睡眠Thread.sleep(50)方法,让当前线程限时等待50毫秒后,跳转至步骤S3;当尝试限流总耗时大于或等于第一尝试等待时间tryTimeMills时,则返回false给目标业务,即限流。
2.如权利要求1所述的一种分布式限流方法,其特征在于:所述步骤S4,包括以下的步骤:
S41、获取Lua脚本入参信息,Lua脚本入参信息包括第二限流关键字key、第二限流时间内最大限流数limitMax、第二限流时间limitTime和第二当前获取流量个数acquireNum;
S42、使用Lua脚本执行Redis的GET指令,获取当前第二限流关键字key累计值,记为current,如果第二限流关键字key存在,则返回累计值给current;如果第二key不存在,则默认第二key累计值为0;
S43、判断current加上第二当前获取流量个数acquireNum的和是否大于第二限流时间内最大限流数limitMax,当current加上第二当前获取流量个数acquireNum的和大于第二限流时间内最大限流数limitMax时,则Lua脚本执行结束,获取返回值0,跳转至步骤S5;当current加上第二当前获取流量个数acquireNum的和小于或等于第二限流时间内最大限流数limitMax时,则跳转至步骤S44;
S44、使用Lua脚本执行Redis的Incyby指令,将当前第二限流关键字key累计值加上第二当前获取流量个数acquireNum;
S45、使用Lua脚本执行Redis的TTL指令,获取当前第二限流关键字key的剩余过期时间,当剩余过期时间值小于0时,则执行Redis的Expire指令,设置当前第二限流关键字key的过期时间为第二限流时间limitTime加上2,获取返回值1;当剩余过期时间值大于或等于0时,则直接获取返回值1。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于银盛支付服务股份有限公司,未经银盛支付服务股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011479920.8/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种耐高温低压变高电阻EPDM混炼胶
- 下一篇:一种健康藕汁饮品的制备方法