ThinkPHP6 限制访问频率,Redis版,支持毫秒级缓存,适用于项目的api接口限制访问频率
前言
针对 “ThinkPHP6 限制访问频率,Cache版”做的升级,有需要的直接拿去复用就好,非常方便。
其他框架可以参考
PHP 限制访问频率,Redis 通用不限制PHP框架版,支持毫秒缓存
首先我们要设置ThinkPHP6的Cache缓存方式
文件路径:config/cache.php
cache.php代码
return [
// 默认缓存驱动
'default' => env('cache.driver', 'redis'),
// 缓存连接方式配置
'stores' => [
'file' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => '',
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
// 缓存标签前缀
'tag_prefix' => 'tag:',
// 序列化机制 例如 ['serialize', 'unserialize']
'serialize' => [],
],
// 更多的缓存连接
'redis' => [
'type' => 'redis',// 驱动方式
'host' => '127.0.0.1',// 服务器地址
'select' => 0,//选择库
'port' => 6379,// 端口
'password' => 'password0000',// 密码
],
],
];
使用注意事项:
①系统需要安装Redis
②启用php redis扩展
限制访问频率代码如下,仅供参考
/**
* 检测用户接口访问频率
* $action 字符串 自定义,建议使用 模块方法名称
* $ttl 正整数 秒,默认1秒
* $uid 用户ID,针对某个用户的ID的限制
*
**/
function api_visits($action,$ttl=500,$uid='')
{
$key = "user_{$uid}_api_{$action}";
$visits = Cache::get($key);
if($visits){
return false;
}else{
Cache::psetex($key,$ttl,1);//缓存500毫秒
return true;
}
}
//使用方式:
$uid = 66;
$ttl = 500;
$visitsRes = api_visits('login_verify',$ttl,$uid);
if($visitsRes)
return $this->error('接口访问频繁,请稍后再试');
return $this->success('Success');
总结
以上就是ThinkPHP6 限制访问频率的 Redis版实现过程,希望对需要的同学有所帮助。