真正的简单算法在最后一分钟计算请求数



我的服务正在调用另一个服务,而另一种服务则根据孔分钟内发送的请求数(每秒多少,只要有多少都没关系< x请求在最后一刻)

我想向我的用户展示真正的粗略估算了最后一分钟的请求。无论如何,它不需要准确,这只是用户查看数字是什么

的一种方式

实现这种计数器的最佳,最少的记忆要求是什么?

您可以做类似:

的事情
  • 保持int[] requestCount = new int[60]
  • 对于每个请求:requestCount[(System.currentTimeMillis() / 1000) % 60]++;
  • 每1秒运行一个计划的作业,以将"陈旧"数组位置(61秒前)重置为0
  • 在过去60秒内获取请求数:IntStream.of(requestCount).sum();

注意:

  • 这不是线程安全的。如果您需要线程安全性,则可以使用final AtomicInteger[]数组。
  • 这对时钟更改等不强大。

足迹应该很小。

最新更新