package com.example.redis.漏斗限流;
/**
* @Auther: liuyujie
* @Date: 2019/3/4 12:48
* @Description:
*/
public class Funnel {
int capacity;//漏斗容量
double leakingRate;//漏水速度
int leftQuota;//漏斗剩余的量
long leakingTs;//上次漏斗漏水的 时间
public Funnel(int capacity, double leakingRate, int leftQuota, long leakingTs) {
this.capacity = capacity;
this.leakingRate = leakingRate;
this.leftQuota = leftQuota;
this.leakingTs = leakingTs;
}
private void makeSpace(){
long nowTs = System.currentTimeMillis();
long deltaTs = nowTs - this.leakingTs;//这个是间隔的时间
int deltaQuota = (int)(deltaTs*leakingRate);//漏掉的水
if (deltaQuota<0){//间隔时间太长,溢出
this.leftQuota=capacity;
this.leakingTs = nowTs;
return;
}
if (deltaQuota<1){//说明漏的时间不够
return;
}
this.leakingTs = nowTs;
this.leftQuota = this.leftQ
java实现 限流算法 漏斗模型
最新推荐文章于 2025-06-26 00:27:02 发布
