解决问题对象: 并发流量

解决方案:
1、计数器:
2、滑动窗口计数器:redis,zset数据结构,权重score存工夫戳,应用rangeByscore查问指定时间段内的
3、漏桶:
4、令牌桶:

方才去查了一些材料 如同redis根本都间接提供了 或者说构造能够实现 这几个限流

简略计数器:hash 存timestamp 和 count,每次进去在间隔timestamp有余指定时差timeLimit时,判断count是否大于countLimit,大于阻止拜访,否则累加count;超过timeLimit时,重置timestamp 和 count

窗口计数器:zset value和score都存timestamp,每次申请先移除窗口期timeLimit之前的记录,对窗口期内的记录总数count与countLimit做比拟,如果超出了,阻止拜访

漏桶:Redis 4.0 提供了一个限流 Redis 模块,名称为 redis-cell,该模块提供漏斗算法,并提供原子的限流指令 这个略微有点不好了解,我要再看看

令牌桶:list当做桶,length当做令牌数,或者初始化一个一般key-value,value存令牌数,如果length和value <= 0 则阻止拜访,否则pop或decr  另开一个常驻工作  按固定速率push或者incr  length或value=令牌下限则进行加牌,用while+sleep来实现这个加牌过程

漏桶:视用户的申请为水,发动申请是向桶内注水,解决申请是出水。这个过程跟令牌桶相同。    令牌桶是初始化为满桶令牌,漏桶是初始化为空桶水    令牌桶【资格】是空桶则阻止申请,漏桶【负载】是满桶阻止申请    令牌桶的加桶速率是  每 1/qps 秒+1,取牌速率跟申请同步; 漏桶的出水速率是qps,注水速率跟申请同步      令牌桶另开工作加牌(加资格),漏桶另开工作出水(消化申请)    这里好奇初始化桶的容量该是多少 QPS? QPS = 并发量/均匀响应时长答案:并发量