redis实现令牌桶算法思路
1.常用的限流思路令牌桶算法和漏桶算法
直接令牌桶算法代码
<?phpclass TokenBucket{private $_config; //redis设定private $_redis; //redis对象private $_queue; //令牌桶private $_max; //最大令牌数/*** 创建redis连接* @return Redis*/private function connect(){$redis = new Redis();$redis->connect('127.0.0.1',6379);$redis->select($this->_config['index']);//用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。return $redis;}public function __construct($config ,$queue,$max){$this->_config = $config;$this->_queue = $queue;$this->_max = $max;$this->_redis = $this->connect();}/***获取令牌*/public function get(){return $this->_redis->rPop($this->_queue)?true:false;}/*** 添加令牌* @param int $num* @return int*/public function add($num =0){$currNum = $this->_redis->lSize($this->_queue);$maxNum = $this->_max;$num = $maxNum >$currNum+$num?$num:$maxNum-$currNum;if ($num >0){$token = array_fill(0,$num,1);$this->_redis->lPush($this->_queue,...$token);return $num;}return 0;}/*** 重新设置了令牌桶,填满令牌*/public function reset(){$this->_redis->delete($this->_queue);$this->add($this->_max);}
}// redis连接设定
$config = array('host' => 'localhost','port' => 6379,'index' => 0,'auth' => '','timeout' => 1,'reserved' => NULL,'retry_interval' => 100,
);$queue = "mycontainer";$max = 5;$tokenBucket = new TokenBucket($config,$queue,$max);
$tokenBucket->reset();// 循环获取令牌,令牌桶内只有5个令牌,因此最后3次获取失败
for($i=0; $i<8; $i++){var_dump($tokenBucket->get());
}// 加入10个令牌,最大令牌为5,因此只能加入5个
$add_num = $tokenBucket->add(10);var_dump($add_num);// 循环获取令牌,令牌桶内只有5个令牌,因此最后1次获取失败
for($i=0; $i<6; $i++){var_dump($tokenBucket->get());
}
redis实现令牌桶算法思路相关推荐
- 令牌桶算法PHP简单实现,php 基于redis使用令牌桶算法 计数器 漏桶算法 实现流量控制...
通常在高并发和大流量的情况下,一般限流是必须的.为了保证服务器正常的压力.那我们就聊一下几种限流的算法. 计数器 计数器是一种最常用的一种方法,在一段时间间隔内,处理请求的数量固定的,超的就不做处理. ...
- PHP与Redis结合令牌桶算法进行实现限流
https://www.php.cn/php-ask-448027.html https://www.zongscan.com/demo333/355.html
- PHP+Redis令牌桶算法 接口限流
在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行调用次数的限制.比如对于某个 用户,他在一个时间段(interval)内,比如 1 ...
- 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容都在这儿
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:雄 ...
- 高可用系统设计 | 分布式限流策略:计数器算法、漏桶算法、令牌桶算法
文章目录 限流 什么是限流? 分布式限流 限流算法 计数器算法 固定窗口计数器 滑动窗口计数器 漏桶算法 令牌桶算法 限流 什么是限流? 限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已 ...
- c++ lua 可以做什么_Redis令牌桶算法(全网最全,后续可以接入lua做原子性操作)...
一 .场景描述 在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行调用次数的限制.比如对于某个 用户,他在一个时间段(interval ...
- 限流——漏桶算法和令牌桶算法的区别
文章目录 限流 漏桶算法 令牌桶算法 漏桶算法和令牌桶算法的区别 时间窗口 时间窗口和令牌桶优缺点 限流 在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存:缓存的目的是提升系统访问速度 ...
- 【229期】Spring Boot 使用令牌桶算法+拦截器+自定义注解+自定义异常实现简单的限流...
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...
- java令牌_基于令牌桶算法的Java限流实现
项目需要使用限流措施,查阅后主要使用令牌桶算法实现,为了更灵活的实现限流,就自己实现了一个简单的基于令牌桶算法的限流实现. 令牌桶算法描述 令牌桶这种控制机制基于令牌桶中是否存在令牌来指示什么时候可以 ...
最新文章
- 【数学知识】三种方法求 [1,n] 中所有数欧拉函数(线性筛欧拉函数优化至 O(n) )
- 机器学习项目实战----信用卡欺诈检测
- 贴一段数组动态扩容的代码
- “逃离大厦”游戏的破解
- LeetCode 1049. 最后一块石头的重量 II
- floor mod sqlserver_ORACLE和SQLServer-SQL语句的区别
- 数字图像处理(七) 图像分割
- 智慧城管三维可视化决策系统平台(数字孪生)—解决方案开发案例
- 程式CMS V4黑色炫酷DJ音乐门户网站源码模板
- 【动画演示软件】Focusky教程 | 如何隐藏某帧的内容,使其在演示时才出现?
- linux文本编辑器英文名,科学网—带格式的文本编辑器Typora 之介绍 - 丁祥欢的博文...
- DBUtils详细介绍+实例
- Contrastive Test-Time Adaptation
- Android--DES加密解密
- GameCenter
- 为了直播焊接,我准备了这些装备
- mysql doesn t exist_Mysql的“Table 'mysql.servers' doesn't exist”的解决方法
- NestJS 7.x 折腾记: (3) 采用nestjs-pino作为Nest logger
- Android Crash 监控
- 数字经济、数字社会、数字政府到底是什么?