[發明專利]一種分布式限流方法有效
| 申請號: | 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.szxzyx.cn/pat/books/202011479920.8/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種耐高溫低壓變高電阻EPDM混煉膠
- 下一篇:一種健康藕汁飲品的制備方法





