一种基于Redis缓存的源端流控方法及系统技术方案

技术编号:32779924 阅读:14 留言:0更新日期:2022-03-23 19:37
本发明专利技术公开了一种基于Redis缓存的源端流控方法及系统,属于后端服务技术开发领域;所述的方法具体步骤如下:S1在Redis中创建多条队列;S2以JSON字串符形式将达到服务项目的请求依次存入Redis队列;S3从Redis队列中进行取操作取出请求并进行业务处理;S4对辅助List里的元素进行出队,并进行具体业务处理和接口调用;本发明专利技术提出了基于Redis缓存的源端流控方法,使用Redis对需要调用到目的端的并发请求进行缓存,利用Redis列表的左进右出实现了队列的效果,并通过定时的取操作实现了接口调用的分流效果。有效的减轻了目的端的瞬时压力,避免了因为高并发引起的服务崩塌,保证了服务的可用性和稳定性。的可用性和稳定性。的可用性和稳定性。

【技术实现步骤摘要】
一种基于Redis缓存的源端流控方法及系统


[0001]本专利技术公开一种基于Redis缓存的源端流控方法及系统,涉及后端服务技术开发领域。

技术介绍

[0002]在大型公司项目开发中,难免会涉及到多个服务或系统之间的相互调用和依赖。各服务产品之间的相互调用保证了功能的准确执行和整个系统的稳定运行,降低了耦合度。同时也增加了个服务产品之间的相互依赖程度。一个服务的崩溃可能会导致这个系统的瘫痪。
[0003]目前,在常见的后端开发项目中,很多项目已经实现了基于本项目的流控,即作为被请求方的流控控制,例如淘宝的双十一的抢购。但基于源端的流控少之又少,这种情况只存在于被调用方没有做流控且不能承受高并发的情景。在这种情况,只能在源端实现流控,缓解目的端的并发压力。
[0004]常见的流控可以通过消息队列来实现,但只是项目之间接口调用的话,消息队列未免有点大材小用。
[0005]Redis是完全开源的,遵守BSD协议,是一个基于内存的高性能的key

value数据库。Redis性能极高,读的速度是110000次/s,写的速度是81000次/s,并且支持丰富的数据类型,包括string,list,set,zset,hash等数据结构的存储。不同的数据结构就能轻松应付各种实用场景;
[0006]故现专利技术一种基于Redis缓存的源端流控方法及系统,以解决上述问题。

技术实现思路

[0007]本专利技术针对现有技术的问题,提供一种基于Redis缓存的源端流控方法及系统,所采用的技术方案为:一种基于Redis缓存的源端流控方法,所述的方法具体步骤如下:
[0008]S1在Redis中创建多条队列;
[0009]S2以JSON字串符形式将达到服务项目的请求依次存入Redis队列;
[0010]S3从Redis队列中进行取操作取出请求并进行业务处理;
[0011]S4对辅助List里的元素进行出队,并进行具体业务处理和接口调用。
[0012]所述S2以JSON字串符形式将达到服务项目的请求依次存入Redis队列的具体步骤如下:
[0013]S201将需要调用目的端接口的参数变成JSON字符串;
[0014]S202使用Redis的List数据类型,通过LPUSH命令存入提前创建好的列表List内。
[0015]所述S3从Redis队列中进行取操作取出请求并进行业务处理的具体步骤如下:
[0016]S301创建定时任务,从队列中rpop出固定数据的元素进行业务处理;
[0017]S302使用while循环和BRPOPLPUSH命令堵塞去元素,并通过辅助列表保证执行结果。
[0018]所述S4对辅助List里的元素进行出队,并进行具体业务处理和接口调用的具体步骤如下:
[0019]S401如果处理成功,将元素从辅助List删除;
[0020]S402处理失败则多次处理,超过失败次数进行删除。
[0021]一种基于Redis缓存的源端流控系统,所述的系统具体包括队列创建模块、请求存入模块、队列处理模块和业务处理模块:
[0022]队列创建模块:在Redis中创建多条队列;
[0023]请求存入模块:以JSON字串符形式将达到服务项目的请求依次存入Redis队列;
[0024]队列处理模块:从Redis队列中进行取操作取出请求并进行业务处理;
[0025]业务处理模块:对辅助List里的元素进行出队,并进行具体业务处理和接口调用。
[0026]所述请求存入模块具体包括参数处理模块和命令保存模块:
[0027]参数处理模块:将需要调用目的端接口的参数变成JSON字符串;
[0028]命令保存模块:使用Redis的List数据类型,通过LPUSH命令存入提前创建好的列表List内。
[0029]所述队列处理模块具体包括元素处理模块和执行处理模块:
[0030]元素处理模块:创建定时任务,从队列中rpop出固定数据的元素进行业务处理;
[0031]执行处理模块:使用while循环和BRPOPLPUSH命令堵塞去元素,并通过辅助列表保证执行结果。
[0032]所述业务处理模块具体包括元素删除模块和失败处理模块:
[0033]元素删除模块:如果处理成功,将元素从辅助List删除;
[0034]失败处理模块:处理失败则多次处理,超过失败次数进行删除。
[0035]本专利技术的有益效果为:本专利技术提出了基于Redis缓存的源端流控方法,使用Redis对需要调用到目的端的并发请求进行缓存,利用Redis列表的左进右出实现了队列的效果,并通过定时的取操作实现了接口调用的分流效果。有效的减轻了目的端的瞬时压力,避免了因为高并发引起的服务崩塌,保证了服务的可用性和稳定性。
附图说明
[0036]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0037]图1是本专利技术方法的流程图;图2是本专利技术系统的结构示意图;图3是本专利技术实施例的实施示意图。
具体实施方式
[0038]下面结合附图和具体实施例对本专利技术作进一步说明,以使本领域的技术人员可以更好地理解本专利技术并能予以实施,但所举实施例不作为对本专利技术的限定。
[0039]实施例一:
[0040]一种基于Redis缓存的源端流控方法,所述的方法具体步骤如下:
[0041]S1在Redis中创建多条队列;
[0042]S2以JSON字串符形式将达到服务项目的请求依次存入Redis队列;
[0043]S3从Redis队列中进行取操作取出请求并进行业务处理;
[0044]S4对辅助List里的元素进行出队,并进行具体业务处理和接口调用;
[0045]本专利技术提供一种基于Redis缓存的源端流控方法,在实现本专利技术方法之前,需要了解被调用方的并发能力,以及一次并发的处理时间;比如商城项目调用计费项目的订单接口,要先弄清楚订单接口一次可以处理的请求个数,每个请求的响应时间是多少;下面将以云服务中云硬盘项目一个定时任务场景作为示例:
[0046]首先按照S1在Redis中创建多条队列,每条队列对应一个业务场景,然后按照S2对同时到达服务项目的请求,以JSON字符串的形式依次存入Redis的队列;
[0047]进一步的,所述S2以JSON字串符形式将达到服务项目的请求依次存入Redis队列的具体步骤如下:
[0048]S201将需要调用目的端接口的参数变成JSON字符串;
[0049]S202使用Redis的List数据类型,通过LPUSH命令存入提前创建好的列表List内;本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Redis缓存的源端流控方法,其特征是所述的方法具体步骤如下:S1在Redis中创建多条队列;S2以JSON字串符形式将达到服务项目的请求依次存入Redis队列;S3从Redis队列中进行取操作取出请求并进行业务处理;S4对辅助List里的元素进行出队,并进行具体业务处理和接口调用。2.根据权利要求1所述的方法,其特征是所述S2以JSON字串符形式将达到服务项目的请求依次存入Redis队列的具体步骤如下:S201将需要调用目的端接口的参数变成JSON字符串;S202使用Redis的List数据类型,通过LPUSH命令存入提前创建好的列表List内。3.根据权利要求2所述的方法,其特征是所述S3从Redis队列中进行取操作取出请求并进行业务处理的具体步骤如下:S301创建定时任务,从队列中rpop出固定数据的元素进行业务处理;S302使用while循环和BRPOPLPUSH命令堵塞去元素,并通过辅助列表保证执行结果。4.根据权利要求3所述的方法,其特征是所述S4对辅助List里的元素进行出队,并进行具体业务处理和接口调用的具体步骤如下:S401如果处理成功,将元素从辅助List删除;S402处理失败则多次处理,超过失败次数进行删除。5.一种基于Redis缓存...

【专利技术属性】
技术研发人员:邢文才江燕刘宇泰景年杰
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

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

1