1分钟之内只能处理1000个请求,你怎么实现,手撕代码?

1分钟之内只能处理1000个请求,你怎么实现,手撕代码?

a) Application 对所有用户访问的次数计数。同时定义一个计时器,单位为一分钟。如果Application 中的用户在单位时间内超出请求次数,就拒绝处理该请求。一分钟再刷新application的值为0.

// 泛型 String 表示用户标识,List中存放用户不同请求的时间戳。
private Map<String, List<Long>> map = new ConcurrentHashMap<>();

我们只需要在单位计数中判断 List中数量是否超出限制即可。

在单位计数中判断List中数量是否超出限制即可。

b). 使用 aop 实现请求的限制,在需要限制的请求方法上加上 aop 逻辑。即可实现,思路如下:

在这里插入图片描述

自定义注解类 实现 请求限制的拦截逻辑, 在需要限制的方法上使用注解,超出限制后拒绝处理请求。


aop。

增强功能:在不改动代码的情况下,为接口增加一些额外的功能

统计接口访问次数。

<!-- AOP -->
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjrt</artifactId>
	<version>1.9.4</version>
</dependency>
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjweaver</artifactId>
	<version>1.9.4</version>
</dependency>
<dependency>
	<groupId>cglib</groupId>
	<artifactId>cglib</artifactId>
	<version>3.2.12</version>
</dependency>

统计所有接口的总访问次数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值