我的服务正在调用其他服务,而该其他服务则根据孔分钟内发送的请求数来限制我的速度(每秒多少无关紧要,只要最后一分钟的请求数少于x)

我想向我的用户显示在最后一分钟内已发出多少请求的非常真实的估计。
无论如何,它不需要准确,这只是用户查看大致数字的一种方式

实现这种计数器的最佳,最少内存需求的方法是什么?

最佳答案

您可以执行以下操作:


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


注意:


这将不是线程安全的。如果需要线程安全,则可以使用final AtomicInteger[]数组。
这对时钟更改等并不稳健。


占用空间应该很小。

08-03 23:59