我的服务正在调用另一个服务,而另一种服务则根据孔分钟内发送的请求数(每秒多少,只要有多少都没关系< x请求在最后一刻)
我想向我的用户展示真正的粗略估算了最后一分钟的请求。无论如何,它不需要准确,这只是用户查看数字是什么
的一种方式实现这种计数器的最佳,最少的记忆要求是什么?
您可以做类似:
的事情- 保持
int[] requestCount = new int[60]
- 对于每个请求:
requestCount[(System.currentTimeMillis() / 1000) % 60]++;
- 每1秒运行一个计划的作业,以将"陈旧"数组位置(61秒前)重置为0
- 在过去60秒内获取请求数:
IntStream.of(requestCount).sum();
注意:
- 这不是线程安全的。如果您需要线程安全性,则可以使用
final AtomicInteger[]
数组。 - 这对时钟更改等不强大。
足迹应该很小。