Java四种常用限流算法-伪代码实现

157 阅读1分钟

一、计数限流

1.1 单机版示例

分布式可使用Redis incr和decr 在这里插入图片描述 优点:实现简单

缺点:释放流量是非原子性操作

1.2 单机版改进

在这里插入图片描述 在固定时间点清空计数器,以防止过多未释放的无效计数将容量填满 在这里插入图片描述

优点:实现简单,有效限制QPS

缺点:固定时间窗口无法应对突发流量,在重制计数的时间点,QPS会最大值可达到2倍 在这里插入图片描述

二、滑动窗口

在这里插入图片描述

Java伪代码(限制QPS<100) 在这里插入图片描述 优点:限流平滑

缺点:规模越大,耗费内存越多

三、漏桶算法

在这里插入图片描述 可使用Redis-cell模块实现 在这里插入图片描述 优点:强制限制平均速率

特点:应对突发流量时,超出容量会直接拒绝服务

四、令牌桶算法

在这里插入图片描述 特点:允许突发流量时,超出令牌个数可选阻塞或拒绝请求

JAVA伪代码 在这里插入图片描述

在这里插入图片描述