1. 计数器法
这个算法应该是最简单最常用的算法了,比如我们把时间细粒度设置为1分钟,一分钟的请求不能超过五百次,那么可以使用redis作为工具,新建一个key,incr test2245,每次请求过来先get判断是否超过限制,跨分钟重置key。
2. 令牌桶
上述算法简单粗暴,但是有一个问题,如果请求都在59秒那一个时间点到达,那么对于上述来说是满足的,但是接下来就跨分钟,这是我们不想看到了,一种改进方式是使用令牌桶:
假设有一个固定容量大小的桶,我们按照固定速度往里面放入令牌,当桶满的时候,令牌要被丢弃,当有请求过来,就拿令牌,如果拿不到足够的令牌,就丢弃这个请求。