1.4 KiB
1.4 KiB
计数器算法
设置一个变量存储T时间内的访问量,每当T时间后重置该变量为0,当变量达到阈值后限制访问
滑动窗口算法
将时间周期划分为N个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期,滑动窗口的格子划分的越多,那么滑动窗口的滚动就越平滑,限流的统计就会越精确
漏桶算法
算法内部有一个容器,不管上面流量多大,下面流出的速度始终保持不变。
准备一个队列,用来保存请求,另外通过一个线程池定期从队列中获取请求并执行,可以一次性获取多个并发执行。
令牌桶算法
以一定的速率往桶中放令牌。每次请求调用需要先获取令牌,只有拿到令牌,才有机会继续执行,否则选择选择等待可用的令牌、或者直接拒绝。
准备一个队列,用来保存令牌,另外通过一个线程池定期生成令牌放到队列中,每来一个请求,就从队列中获取一个令牌
集群限流
每次有相关操作的时候,就向redis服务器发送一个incr命令,比如需要限制某个用户访问/index接口的次数,只需要拼接用户id和接口名生成redis的key,每次该用户访问此接口时,只需要对这个key执行incr命令,在这个key带上过期时间,就可以实现指定时间的访问频率。