PHP code example of imiphp / imi-rate-limit
1. Go to this page and download the library: Download imiphp/imi-rate-limit library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
imiphp / imi-rate-limit example snippets
[
'components' => [
// 引入本组件
'RateLimit' => 'Imi\RateLimit',
],
'pools' => [
// 一定得要配置 Redis 连接池才可以用
],
'redis' => [
'defaultPool' => 'redis连接池名称',
],
]
/**
* 限制每秒同时访问 3 次
*
* @Action
*
* @RateLimit(name="test1", capacity=3)
*
* @return void
*/
public function test1()
{
return [
'data' => 'test1',
];
}
/**
* 限制每秒同时访问 1 次,等待解除限制后继续执行,超时时间为 1 秒
*
* @Action
*
* @RateLimit(name="test2", capacity=1)
* @BlockingConsumer(1)
*
* @return void
*/
public function test2()
{
return [
'data' => 'test2',
];
}
/**
* 总容量为 1000,每毫秒填充 1,每次调用扣除 500
*
* 自定义处理限制
*
* @Action
*
* @RateLimit(name="test3", capacity=1000, fill=1, unit="millisecond", deduct=500, callback="\ImiDemo\HttpDemo\Util\RateLimitParser::parse")
*
* @return void
*/
public function test3()
{
return [
'data' => 'test3',
];
}
/**
* 手动调用限流
*
* 总容量为 1000,每毫秒填充 1,每次调用扣除 500
*
* @Action
*
* @return void
*/
public function test4()
{
if(true !== $result = RateLimiter::limit('test4', 1000, function(){
// 自定义回调中的返回值,会作为原方法的返回值被返回
return [
'message' => '自定义触发限流返回内容',
];
}, 1, 'millisecond', 500))
{
return $result;
}
return [
'data' => 'test4',
];
}
/**
* 手动调用限流
*
* 限制每秒同时访问 1 次,等待解除限制后继续执行,超时时间为 1 秒
*
* @Action
*
* @return void
*/
public function test5()
{
if(true !== $result = RateLimiter::limitBlock('test5', 1, function(){
// 自定义回调中的返回值,会作为原方法的返回值被返回
return [
'message' => '自定义触发限流返回内容',
];
}, 1, 1, 'second', 1))
{
return $result;
}
return [
'data' => 'test5',
];
}