algorithm - 限制请求的算法/数据结构
问题描述
我有一个每秒调用多次的请求接口,大致如下所示:
def do_something(timestamp_in_ms)
我正在寻找一种方法来进行简单的请求限制,以确保只处理一秒钟内的前 N 个请求,其余的被丢弃。理想情况下,这应该适用于每个持续一秒的时间间隔(例如 00:00:00.123-00:00:01.123),而不仅仅是时钟秒数(例如 00:00:00-00:00:01)。
另一个问题是do_something
调用非常频繁,因此限制必须是高性能的。
解决方案
您可以使用一个包含先前 N-1 个请求的时间戳的队列,并将新候选请求的时间戳与队列中最早请求的时间戳进行比较。
- 如果相差超过一秒,则执行候选请求并将其时间戳添加到队列中;
- 如果差值小于一秒,则抛出候选请求。
每当一个新的时间戳添加到队列中时,最旧的时间戳就会被丢弃。
资源:
推荐阅读
- c# - C# 0xC0000005(访问冲突)可能的修复?
- git - git rebase 冲突,如何删除在 HEAD 中删除的所有冲突文件
- wpf - 是否可以在多个按钮中使用相同的资源样式并在 XAML 中的 IsMouseOver 事件上单独更改背景图像
- java - 临时缓冲区的 Netty 引用计数
- amazon-web-services - 使用 AWS-Lambda 实现 AWS-Lex
- javascript - 在 innerHTML 中加载脚本
- c - 'atm' 模拟器
- php - Slim 3 POST 请求数据不可访问
- javascript - 如何根据vue中的另一个选择更改选择?
- scala - sbt 找不到启动器 jar:./bin/sbt-launch.jar