限流与下载接口请求数控制

            收银台系统相对于互联网应用流量要平稳很多,高峰流量也就平时的三倍,完全是可控的,我们这里用限流主要是控制后台同时下载XLS表格的请求数,因为后台系统要提供大量的导出XLS表格功能,收银员与管理人员需要用我们导出的数据去做各种分析(应该是我们的报表功能还不够完善造成的)。

下面整理一下Guaua提供的限流工具以及我们自己的做法

一、使用LoadCaching实现接口限流

思路:创建LoadCaching对象,设置有效期为1秒,缓存Key为时间戳(当前秒数),值是计数器(调用次数累加),如果查询命中计数器自增,当计数器值大于限定值时不处理,如果没有命中,创建一个新的时间戳缓存并初始化值为0,达到限流的目的。

限流与下载接口请求数控制_第1张图片

二、使用RateLimter限流

RateLimter限制对资源的访问速率,有两种获取令牌的接口,一种是非阻塞式,拿不到令牌直接返回false,另一种是阻塞式,拿不到令牌等待令牌。

RateLimiter rateLimiter = RateLimiter.create(10)每秒创建令牌的数量。

限流与下载接口请求数控制_第2张图片

三、下载接口请求数量限流

思路:创建一个拦截器,使用redis存储当前下载的请求(生成一个唯一串),判断当前redis该key的size大小,如果超过限定值,就直接返回需要等待的消息,当下载完成后,将该请求唯一串从redis中删除。

限流与下载接口请求数控制_第3张图片

你可能感兴趣的:(Java技术,java,开发语言)