System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于java的redis分布式限流方法及系统技术方案_技高网

一种基于java的redis分布式限流方法及系统技术方案

技术编号:41218573 阅读:2 留言:0更新日期:2024-05-09 23:39
本发明专利技术属于流量管理技术领域,公开了一种基于java的redis分布式限流方法及系统,所述方法包括以下步骤:关键字获取:获取业务终端输入的关键字;数据获取:对关键字调用decr命令,将该关键字在redis中的次限数减1,然后返回剩余的次限数;调用ttl命令得到剩余的有效时间并向redis返回剩余的有效时间;有效时间计算,若剩余的有效时间不小于0则执行次限数计算步骤;次限数计算,判断剩余的次限数是否小于1,若是则向业务终端返回false,若否则向业务终端返回true;其中,返回false为限流,返回true为通过限流。本发明专利技术将分布式限流的逻辑写在java里,从而解决了现有的分布式限流方法兼容性差以及会提高网络负担的问题。

【技术实现步骤摘要】

本专利技术属于流量管理,尤其涉及一种基于java的redis分布式限流方法及系统


技术介绍

1、目前,限流是指通过一定的方法限制某段代码在一定时间内的执行次数。分布式限流就是,同一项目布署多个节点,在负载均衡的作用中,对同一功能的请求每次会由不同节点去处理,这时对某一功能的限流就是对多节点集群关于该功能的限流,比如:对一个节点数为50的集群中的功能a限制5秒内访问不超过2000次。现有分布式限流的实现方法有很多,有基于数据库、zookeeper、redis的等等。目前行业内基于redis实现的分布式限流,普遍都是基于redis的lua脚本命令来实现的。

2、现有技术实现方式存在以下问题:1、每次调用redis都要发送lua脚本,对于高并发要求的项目会带来一定的网络负担。2、存在兼容问题。在测试环境和线上环境中,每家的部署方案并不相同,有的是单节点的redis,有的是代理集群的redis,有的是redis集群部署。而redis关于lua的命令,不同版本或不同的集群代理上的redis的支持兼容度并不相同。如此,就有造成在测试环境所用的lua脚本执行没问题,但到了正式环境会出现bug,或者有在这家所用的lua脚本执行没问题,同机的lua脚本复制到另一家执行就不通过。

3、通过上述分析,现有技术存在的问题及缺陷为:现有的分布式限流方法兼容性差以及会提高网络负担。


技术实现思路

1、针对现有技术存在的问题,本专利技术提供了一种基于java的redis分布式限流方法及系统。

2、本专利技术是这样实现的,一种基于java的redis分布式限流方法,所述方法包括以下步骤:

3、s1,关键字获取:获取业务终端输入的关键字;

4、s2,数据获取:对关键字调用decr命令,将该关键字在redis中的次限数减1,然后返回剩余的次限数;调用ttl命令得到剩余的有效时间并向redis返回剩余的有效时间;

5、s3,有效时间计算,若剩余的有效时间不小于0则执行次限数计算步骤;

6、s4,次限数计算,判断剩余的次限数是否小于1,若是则向业务终端返回false,若否则向业务终端返回true;其中,返回false为限流,返回true为通过限流。

7、进一步,所述s2中次限数表示关键字限制访问的次数,所述有效时间表示关键字受限制访问的时长;在执行所述s1关键字获取步骤前,先调用redis上下文获取连接池。

8、进一步,所述s3中当剩余的有效时间不小于0,表示当前时刻已经超过了关键字受限制访问的时长。

9、进一步,所述s4中当更新后的次限数小于1,表示关键字的访问次数已经超过限制访问的次数,此次访问会限流;当更新后的次限数不小于1,表示关键字的访问次数还没超过限制访问的次数,如此访问能通过限流。

10、进一步,所述s1关键字获取步骤中,获取业务终端输入的关键字后,调用setnx命令,检查redis中有没有该关键字,若有则执行数据获取步骤;若没有则设置关键字的次限数和关键字的有效时间后向业务终端返回true;

11、获取业务终端输入的关键字后,尝试调用setnx命令对关键字设置次限数和有效时间;若redis中没有关键字,则能设置成功,并向业务终端返回true,若redis中有关键字,则设置不成功,并执行下一个步骤,即数据获取步骤;

12、若redis中有该关键字,则表示当前业务终端输入的关键字存在限制访问,然后再通过数据获取步骤、有效时间计算步骤和次限数计算步骤获取该关键字的限制访问是否在有效时间内以及该关键字的访问次数是否超过了限制访问的上限;若redis中没有该关键字,则表示当前业务终端输入的关键字不存在,则可以对关键字设置次限数和有效时间并存储到redis,然后跳转到通过限制,从而能继续执行接下来的代码。

13、进一步,所述s3有效时间计算步骤中,判断剩余的有效时间是否小于0,若是则调用del命令删除在redis中记录的关键字的次限数和有效时间;若否则执行次限数计算步骤;

14、若剩余的有效时间小于0,表示关键字的限制访问已经过期,就能将关键字在redis中的记录删除,释放redis的存储空间。

15、本专利技术的另一目的在于提供一种实施所述基于java的redis分布式限流方法的基于java的redis分布式限流系统,所述系统包括:

16、关键字获取模块,用于获取业务终端输入的关键字;

17、数据获取模块,用于对关键字调用decr命令,将该关键字存储在redis中的次限数减1,然后返回剩余的次限数;用于调用ttl命令得到剩余的有效时间并向redis返回剩余的有效时间;

18、有效时间计算模块,用于若剩余的有效时间不小于0则执行次限数计算模块;

19、次限数计算模块,用于判断剩余的次限数是否小于1,若是则向业务终端返回false,若否则向业务终端返回true;其中,返回false为限流,返回true为通过限流。

20、本专利技术的另一目的在于提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行所述基于java的redis分布式限流方法的步骤。

21、本专利技术的另一目的在于提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行所述基于java的redis分布式限流方法的步骤。

22、本专利技术的另一目的在于提供一种信息数据处理终端,所述信息数据处理终端用于实现所述基于java的redis分布式限流系统。

23、结合上述的技术方案和解决的技术问题,本专利技术所要保护的技术方案所具备的优点及积极效果为:

24、第一、本专利技术解决了现有的分布式限流方法兼容性差以及会提高网络负担的问题。在所述基于java的redis分布式限流方法中,将分布式限流的逻辑写在java里,从而解决了现有的分布式限流方法兼容性差以及会提高网络负担的问题。通过所述基于java的redis分布式限流方法,业务终端每次访问都在一个地方计数并返回当前次限数,当返回的次限数还没有达到上限时返回true通过限流,否则返回false被限流。如此,根据返回的情况判断是否继续执行接下来的代码。

25、在java代码中实现分布式限流,不受不同服务器和部署方案的影响兼容性良好。并且,无需像常规方法频繁调用脚本,一定程度上降低了网络负担的问题。

26、第二,本专利技术提供的基于java的redis分布式限流方法确实有其独特性和优点。以下是其显著的技术进步和的应用场景:

27、1.实时性:该方法通过直接在redis上进行操作,确保了高效的响应时间和低延迟。对于需要实时性的应用场景(如秒杀、抢购等),此方法提供了非常好的实时性能。

28、2.简洁性:这个方法步骤清晰、逻辑简单。本文档来自技高网...

【技术保护点】

1.一种基于java的redis分布式限流方法,其特征在于,所述方法包括以下步骤:

2.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述S2中次限数表示关键字限制访问的次数,所述有效时间表示关键字受限制访问的时长;在执行所述S1关键字获取步骤前,先调用redis上下文获取连接池。

3.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述S3中当剩余的有效时间不小于0,表示当前时刻已经超过了关键字受限制访问的时长。

4.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述S4中当更新后的次限数小于1,表示关键字的访问次数已经超过限制访问的次数,此次访问会限流;当更新后的次限数不小于1,表示关键字的访问次数还没超过限制访问的次数,如此访问能通过限流。

5.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述S1关键字获取步骤中,获取业务终端输入的关键字后,调用setNx命令,检查redis中有没有该关键字,若有则执行数据获取步骤;若没有则设置关键字的次限数和关键字的有效时间后向业务终端返回true;

6.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述S3有效时间计算步骤中,判断剩余的有效时间是否小于0,若是则调用del命令删除在redis中记录的关键字的次限数和有效时间;若否则执行次限数计算步骤;

7.一种实施如权利要求1-6任意一项所述基于java的redis分布式限流方法的基于java的redis分布式限流系统,其特征在于,所述系统包括:

8.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1-6任意一项所述基于java的redis分布式限流方法的步骤。

9.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1-6任意一项所述基于java的redis分布式限流方法的步骤。

10.一种信息数据处理终端,其特征在于,所述信息数据处理终端用于实现如权利要求7所述基于java的redis分布式限流系统。

...

【技术特征摘要】

1.一种基于java的redis分布式限流方法,其特征在于,所述方法包括以下步骤:

2.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述s2中次限数表示关键字限制访问的次数,所述有效时间表示关键字受限制访问的时长;在执行所述s1关键字获取步骤前,先调用redis上下文获取连接池。

3.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述s3中当剩余的有效时间不小于0,表示当前时刻已经超过了关键字受限制访问的时长。

4.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述s4中当更新后的次限数小于1,表示关键字的访问次数已经超过限制访问的次数,此次访问会限流;当更新后的次限数不小于1,表示关键字的访问次数还没超过限制访问的次数,如此访问能通过限流。

5.如权利要求1所述基于java的redis分布式限流方法,其特征在于,所述s1关键字获取步骤中,获取业务终端输入的关键字后,调用setnx命令,检查redis中有没有该关键字,若有则执行数据获取步骤;若没有则设置关键字的次限数和...

【专利技术属性】
技术研发人员:吴志雄徐一鸣李衡
申请(专利权)人:南威软件股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1