您的位置 首页 php

限流 Redis list 列表 Lpush rpop 实现令牌桶 – PHP 实例

令牌桶限流介绍

令牌桶算法 (Token Bucket) 和 Leaky Bucket 效果一样但方向相反的算法,更加容易理解。
随着时间流逝,系统会按恒定 1/QPS 时间间隔 (如果 QPS=100, 则间隔是 10ms) 往桶里加入 Token (想象和漏洞漏水相反,有个水龙头在不断地加水), 如果桶已经满了就不再加了。
新请求来临时,会各自拿走一个 Token, 如果没有 Token 可拿了就阻塞或者拒绝服务.

  • 令牌桶的另外一个好处是可以方便的改变速度。
  • 一旦需要提高速率,则按需提高放入桶中的令牌的速率。
  • 一般会定时 (比如 1000 毫秒) 往桶中增加一定数量的令牌,有些变种算法则实时的计算应该增加的令牌的数量.

父类

调用实例

添加令牌

/**

* 添加令牌数量

*/

public function add()

{

// 默认最大添加数量为300

$trafficShaper = new TrafficShaper(300);

$trafficShaper->add(50);

}

请求过快

$trafficShaper = new TrafficShaper();

if (!$trafficShaper->get()) {

throw new TooManyRequestsHttpException(‘请求过快’);

}

转载地址:

文章来源:智云一二三科技

文章标题:限流 Redis list 列表 Lpush rpop 实现令牌桶 – PHP 实例

文章地址:https://www.zhihuclub.com/149180.shtml

关于作者: 智云科技

热门文章

网站地图