需求背景提供给APP的接口
提供给大众接口
并发限流
抢购商品防止系统瘫痪起飞 ( PHP版本 )<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
for($i = 0;$i<100;$i++)
{
$check = TokenBucket("10","ApiCount","60","10");
if ($check)
{
echo "成功";
}else {
echo "失败";
}
}
/*
* @function TokenBucket 令牌限速
*
* @params string $Uid 用户ID
*
* @params string $BucketName 令牌名称
*
* @params string $Time 令牌发放时间间隔
*
* @params string $BucketLimit 令牌桶的大小
*
* return booblean ture|false 是否超过请求
*
*/
function TokenBucket($Uid = '', $BucketName = '',$Time = '',$BucketLimit = ''){
$key = $Uid.':'.$BucketName;
$check = $redis->exists($key);
if ($check) {
$redis->incr($key);
$count = $redis->get($key);
if ($count > $BucketLimit) {
return false;
}
}else {
$redis->incr($key);
//限制时间为60秒
$redis->expire($key,$Time);
}
// $count = $redis->get($key);
// return $count; 你可以返回当前用户请求的次数
return true;
}
?>扩展
这里只是列举一个用户限速的demo 那么全系统的限速是怎么做的呢?
本文由 舒舒 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Mar 22, 2018 at 10:10 am