用于计算最后一分钟请求数的真实简单算法

时间:2016-12-28 13:00:03

标签: java count request

我的服务是调用其他服务而这个其他服务根据在一分钟内发送的请求数量限制我(无论每秒多少,只要在最后一分钟有< x请求)

我想向我的用户显示真的非常粗略估计在最后一分钟内已经提出了多少请求。 它无论如何都不需要准确,它只是用户查看大致数字

的一种方式

实施这样一个计数器的最佳,最少内存要求的方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  • 维持int[] requestCount = new int[60]
  • 每个请求
  • requestCount[(System.currentTimeMillis() / 1000) % 60]++;
  • 每1秒运行一次预定作业,将“陈旧”阵列位置(61秒前)重置为0
  • 获取过去60秒内的请求数:IntStream.of(requestCount).sum();

注意:

  • 这不是线程安全的。如果您需要线程安全,可以使用final AtomicInteger[]数组。
  • 这对时钟变化等不太有用。

足迹应该相当小。