Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算最后一分钟请求数的Real simple算法_Java_Count_Request - Fatal编程技术网

Java 计算最后一分钟请求数的Real simple算法

Java 计算最后一分钟请求数的Real simple算法,java,count,request,Java,Count,Request,我的服务正在调用另一个服务,而该另一个服务根据在一个洞分钟内发送的请求数限制我(不管每秒发送多少请求,只要最后一分钟内有

我的服务正在调用另一个服务,而该另一个服务根据在一个洞分钟内发送的请求数限制我(不管每秒发送多少请求,只要最后一分钟内有 我想向我的用户显示一个真正的粗略估计,在最后一分钟内提出了多少请求。 不管怎么说,它不需要精确,它只是让用户看到大致数字的一种方式


实现这样一个计数器,最好的、占用内存最少的方法是什么?

您可以这样做:

  • 维护一个
    int[]requestCount=new int[60]
  • 对于每个请求:
    requestCount[(System.currentTimeMillis()/1000)%60]+

  • 每1秒运行一次计划作业,将“过时”阵列位置(61秒前)重置回0
  • 要获取过去60秒内的请求数:
    IntStream.of(requestCount.sum()
注:

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

占地面积应该相当小。

您可以执行以下操作:

  • 维护一个
    int[]requestCount=new int[60]
  • 对于每个请求:
    requestCount[(System.currentTimeMillis()/1000)%60]+

  • 每1秒运行一次计划作业,将“过时”阵列位置(61秒前)重置回0
  • 要获取过去60秒内的请求数:
    IntStream.of(requestCount.sum()
注:

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

占用空间应该相当小。

rpm(软件包管理器)标记在此处不相关,请删除。您是指在过去60秒内或在当前分钟内(如14:13)发送的请求数,这可能是10秒前开始的?在过去60秒内,SRPM(软件包管理器)标记在此处不相关,请问您的意思是在过去60秒内发送的请求数,或者在当前分钟内发送的请求数,比如说14:13,这可能是10秒前开始的?在过去60秒内,新的int[60]和System.currentTimeMillis()%1000不会在这里引起问题吗?它可以在999位置写入,但数组只能在59@Johny19你说得对:应该是
(毫秒/1000)%60
“每1秒运行一个计划作业,将“过时”数组位置(61秒前)重置回0”这是否意味着我必须每1秒遍历一次数组,以发现with条目超过60秒?我怀疑类似
requestCount[(millis/1000)%60+1]=0的东西可能会起作用-待测试。取决于你想要的精确程度。可能会再次如此(索引60)。但是,是的,我明白你的意思,我现在就试试。新的int[60]和System.currentTimeMillis()%1000不会在这里引起问题吗?它可以在999位置写入,但数组只能在59@Johny19你说得对:应该是
(毫秒/1000)%60
“每1秒运行一个计划作业,将“过时”数组位置(61秒前)重置回0”这是否意味着我必须每1秒遍历一次数组,以发现with条目超过60秒?我怀疑类似
requestCount[(millis/1000)%60+1]=0的东西可能会起作用-待测试。取决于你想要的精确程度。可能会再次如此(索引60)。但我明白你的意思,我现在就试试