ltxiong/flowlimiter

自定义的接口限流类

dev-master 2020-07-26 15:30 UTC

This package is auto-updated.

Last update: 2025-05-27 03:18:24 UTC


README

参考:https://github.com/titan-web/rate-limit https://blog.csdn.net/zzti_erlie/article/details/105438501

实现全部依赖redis,并且依赖redis单实例 优化:可以引入锁方案对操作进行加锁处理避免并发造成数据不一致,由于接口限流器并不需要严格的数据准确,加锁不加锁影响不大,所以暂时没加

基于Redis实现的计数器算法 业务限流器 实现原理:将时间片切分成足够细的粒度,通过时间窗口流动的方式来动态实现最近的N时间段内可容纳的流量

漏桶算法实现的接口限流器(控制粒度到秒级别,也就是控制每秒流量) 数据被填充到桶中,并以固定速率注入网络中,而不管数据流的突发性,如桶是空的,不做任何事情 主机在每一个时间片向网络注入一个数据包,因此产生一致的数据流

令牌桶算法实现的接口限流器(需要定时任务定时调用令牌桶添加函数添加令牌) 实现原理:定时往令牌桶当中添加固定数量的数据,业务从令牌桶获取数据,取到数据就进行业务处理,获取不到数据业务就不处理 可以通过redis incrBy decr 来实现,也可以通过redis队列来实现 1、如通过redis incrBy decr来实现,每次添加时通过 incrBy往令牌桶添加数据,获取数据时,每次通过decr减少数据,直到decr减少到0为止 2、通过redis队列来实现,每次往队列添加固定个数的数据,获取数据时,每次通过pop减少队列数据,直到pop不出数据为止