CN112214268A - 一种基于Redis的限流方法 - Google Patents
一种基于Redis的限流方法 Download PDFInfo
- Publication number
- CN112214268A CN112214268A CN202011119315.XA CN202011119315A CN112214268A CN 112214268 A CN112214268 A CN 112214268A CN 202011119315 A CN202011119315 A CN 202011119315A CN 112214268 A CN112214268 A CN 112214268A
- Authority
- CN
- China
- Prior art keywords
- request
- token
- redis
- tokens
- token bucket
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 13
- 238000004422 calculation algorithm Methods 0.000 claims description 6
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 241000700189 Hystrix <Rodentia> Species 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Abstract
本发明公开了一种基于Redis的限流方法,具体包括以下步骤:S1.服务收到请求;S2.服务对Redis发起请求,判断本次请求是否被限流;S3.服务根据返回结果判断拦截请求或放行请求。本发明具有以下优点:不必使用令牌生成器循环添加令牌,可节省资源;不必持续占用Redis存储资源;使用时间差值计算两次请求之间应恢复的令牌数,来代替循环添加令牌的令牌生成器;对接口信息设置超时时间,如果令牌桶恢复满则自动删除接口信息释放资源,且不影响正常的业务流程。
Description
技术领域
本发明涉及IT与软件开发领域,特别涉及一种基于Redis的限流方法。
背景技术
由于API接口无法控制调用方的行为,因此当遇到瞬时请求量激增时,会导致接口占用过多服务器资源,使得其他请求响应速度降低或是超时,更有甚者可能导致服务器宕机。
限流是目前常用的接口保护手段之一。
限流是通过限制单位时间内接受的请求数,以避免请求数量激增导致服务器压力过大。
目前业内常用的限流框架主要有Sentinel、Hystrix等,但这些第三方框架都需要引入外部依赖,并且占用资源较高。
发明内容
本发明要解决的技术问题是克服现有技术的缺陷,提供一种基于Redis的限流方法。
为了解决上述技术问题,本发明提供了如下的技术方案:
本发明一种基于Redis的限流方法,采用令牌桶算法进行限流,令牌以固定速率生成,生成的令牌放入令牌桶中存放,如果令牌桶满了则多余的令牌会直接丢弃,当请求到达时,会尝试从令牌桶中取令牌,取到了令牌的请求可以执行,如果桶空了,那么尝试取令牌的请求会被限制,令牌桶算法既能够将所有的请求平均分布到时间区间内,又能接受服务器能够承受范围内的突发请求,具体包括以下步骤:
S1.服务收到请求;
S2.服务对Redis发起请求,判断本次请求是否被限流;
S3.服务根据返回结果判断拦截请求或放行请求。
与现有技术相比,本发明的有益效果如下:
1.不必使用令牌生成器循环添加令牌,可节省资源。
2.不必持续占用Redis存储资源。
和现有技术相比,主要创造性在于:
1.使用时间差值计算两次请求之间应恢复的令牌数,来代替循环添加令牌的令牌生成器。
2.对接口信息设置超时时间,如果令牌桶恢复满则自动删除接口信息释放资源,且不影响正常的业务流程。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是本发明的流程结构示意图;
图2是本发明的原理图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
实施例1
如图1-2所示,本发明提供一种基于Redis的限流方法,采用令牌桶算法进行限流,令牌以固定速率生成,生成的令牌放入令牌桶中存放,如果令牌桶满了则多余的令牌会直接丢弃,当请求到达时,会尝试从令牌桶中取令牌,取到了令牌的请求可以执行,如果桶空了,那么尝试取令牌的请求会被限制,令牌桶算法既能够将所有的请求平均分布到时间区间内,又能接受服务器能够承受范围内的突发请求,具体包括以下步骤:
S1.服务收到请求;
S2.服务对Redis发起请求,判断本次请求是否被限流;
S3.服务根据返回结果判断拦截请求或放行请求。
具体的,以下是完整实现流程:
1.当客户端收到请求时,将接口编号作为参数,调用Lua脚本;
2.Lua脚本通过接口编号查询此接口的Hash,Hash中存放有接口的令牌恢复速率、令牌桶大小、令牌桶当前令牌数量、上次被请求时间;
3.如果没有查询到,则视为首次请求,令牌桶令牌数量设置为与令牌桶大小相同;
4.如果查询到,则视为非首次请求,按照上次被请求时间与本次被请求时间之差,即可与令牌桶恢复速率计算得出两次请求中应恢复的令牌数量;将这部分数量加到令牌桶中,若超过令牌桶大小则以令牌桶大小为最大值;
5.如果令牌数为0,则返回接口被限流;
6.如果令牌数不为0,则令牌数减一,并将其与被请求时间写入接口对应的Hash中。
与现有技术相比,本发明的有益效果如下:
1.不必使用令牌生成器循环添加令牌,可节省资源。
2.不必持续占用Redis存储资源。
和现有技术相比,主要创造性在于:
1.使用时间差值计算两次请求之间应恢复的令牌数,来代替循环添加令牌的令牌生成器。
2.对接口信息设置超时时间,如果令牌桶恢复满则自动删除接口信息释放资源,且不影响正常的业务流程。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种基于Redis的限流方法,其特征在于,采用令牌桶算法进行限流,令牌以固定速率生成,生成的令牌放入令牌桶中存放,如果令牌桶满了则多余的令牌会直接丢弃,当请求到达时,会尝试从令牌桶中取令牌,取到了令牌的请求可以执行,如果桶空了,那么尝试取令牌的请求会被限制,令牌桶算法既能够将所有的请求平均分布到时间区间内,又能接受服务器能够承受范围内的突发请求,具体包括以下步骤:
S1.服务收到请求;
S2.服务对Redis发起请求,判断本次请求是否被限流;
S3.服务根据返回结果判断拦截请求或放行请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011119315.XA CN112214268A (zh) | 2020-10-19 | 2020-10-19 | 一种基于Redis的限流方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011119315.XA CN112214268A (zh) | 2020-10-19 | 2020-10-19 | 一种基于Redis的限流方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112214268A true CN112214268A (zh) | 2021-01-12 |
Family
ID=74055824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011119315.XA Pending CN112214268A (zh) | 2020-10-19 | 2020-10-19 | 一种基于Redis的限流方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112214268A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116074384A (zh) * | 2023-01-10 | 2023-05-05 | 安芯网盾(北京)科技有限公司 | 一种控制业务请求数量的方法及系统 |
-
2020
- 2020-10-19 CN CN202011119315.XA patent/CN112214268A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116074384A (zh) * | 2023-01-10 | 2023-05-05 | 安芯网盾(北京)科技有限公司 | 一种控制业务请求数量的方法及系统 |
CN116074384B (zh) * | 2023-01-10 | 2024-01-30 | 安芯网盾(北京)科技有限公司 | 一种控制业务请求数量的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110611623B (zh) | 限流方法和装置 | |
CN112165436B (zh) | 流量控制方法、装置及系统 | |
CN111245732B (zh) | 一种流量控制方法、装置及设备 | |
CN111198759B (zh) | 一种内存优化方法、系统、终端设备及可读存储介质 | |
CN111585913B (zh) | 基于回收令牌的服务流量限制方法及存储介质 | |
CN112650575B (zh) | 资源调度方法、装置和云端服务系统 | |
US20230185772A1 (en) | Inode number distribution management method for distributed storage system and related component | |
CN113517985B (zh) | 文件数据处理方法、装置、电子设备及计算机可读介质 | |
CN112214268A (zh) | 一种基于Redis的限流方法 | |
JP4347416B2 (ja) | 通信ネットワークにおけるトラヒック制御 | |
CN111897791B (zh) | 一种业务分流方法、装置、设备和存储介质 | |
CN109471989A (zh) | 一种页面请求处理方法及相关装置 | |
CN101526959A (zh) | 一种数据存储方法和装置 | |
CN113038394B (zh) | 会话绑定关系处理方法、装置、电子设备和可读介质 | |
CN113886082A (zh) | 请求处理方法、装置、计算设备及介质 | |
CN114157717B (zh) | 一种微服务动态限流的系统及方法 | |
WO2017050121A1 (zh) | 计费请求消息的过载控制方法及装置 | |
CN111859877A (zh) | 一种excel导入导出的实现方法及装置 | |
CN112600941B (zh) | 自动更新传输数据大小优化的方法、装置及存储介质 | |
CN1332531C (zh) | 一种动态调整业务管理点系统服务性能的方法 | |
CN117793204A (zh) | 一种业务请求的处理方法和装置 | |
CN110944343B (zh) | 一种aac和pcrf之间的交互方法 | |
CN116402510B (zh) | 一种基于高并发网络服务的无感支付方法、介质以及设备 | |
CN113312234B (zh) | 一种健康检测的优化方法及终端 | |
CN115509763B (zh) | 指纹计算方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20210112 |