在Java中实现基本的速率限制器

时间:2018-11-11 00:25:58

标签: java rate-limiting cache2k

我需要用Java实现一个简单api的基本速率限制(每天最多40-50个请求) 要求是: 来自IP的请求应在M秒内限制为N(例如:60秒内10次请求) 这是我所做的:使用过滤器,逻辑是: 方法1: 使用cache2k保存IP地址和带有计数和上次访问时间的pojo

将每个ip用作键,将pojo用作值(pojo具有诸如:count的字段,最后一次访问。)

一旦请求到来,请检查缓存中的IP,

  • 如果未检索到IP,则将其插入缓存: 键:ip value:pojo的计数为1,最后一次访问为当前日期。

  • 如果检索到IP,则检查上次访问日期。

    • 如果上次访问时间与当前时间之间的差为> M秒,则表示在超过M秒的时间内没有来自此ip的请求。创建一个新的Pojo,其计数为1,最后一次访问为当前日期,并插入到缓存

    • 如果差异为

      • 如果计数为

      • 如果count = N,请过滤请求-不允许请求

方法2:

  • 将缓存过期时间设置为M秒:

  • 检查条目是否在缓存中。

    • 如果不是,则将key插入ip并将value插入count(即1)
    • 如果是,请检查计数,
      • 如果count是= N,则不允许
      • 否则,插入具有更新计数的值并允许请求

我不想通过使用Guava来简化应用程序而使事情复杂化。

如果有人可以提出建议,那就太好了。

谢谢

0 个答案:

没有答案