```
~~~
<?php
namespace app\common\service;
use think\Exception;
/**
* Class RedisLimit
* @package app\common\service
* redis 简单限流
*/
class RedisLimit
{
/**
* @var int
*/
static $oneITime = 60; // 单位时间 一分钟
/**
* @var int
*/
static $oneIMax = 50; // 一个用户Ip一分钟最多仅允许访问访问10次
/**
* @var int
*/
static $platITime = 60; // 针对所有用户,单位时间内允许访问的最大次数
/**
* @var int
*/
static $platIMax = 10; // 针对所有的用户,该接口最多仅允许访问N次
/**
* Redis配置:IP
*/
const REDIS_CONFIG_HOST = '127.0.0.1';
/**
* Redis配置:端口
*/
const REDIS_CONFIG_PORT = 6379;
const KEY='RT_DS8dsad845*/-sda';
/**
* @return \think\response\Json
* @throws Exception
* 限制全局请求
*/
public static function redis_lock_all_limit()
{
$redis = self::getRedisConn();
//.... 针对平台全局锁,用于限制单位时间内所有用户访问的次数
$platKey = md5(request()->url());
$platFlowCount = $redis->get($platKey);// 平台访问次数
if($platFlowCount){
if($platFlowCount >= self::$platIMax){
return json(['code'=>0,'msg'=>'超过访问次数']);
}
}
$redis->incr($platKey);// ++1 次访问次数
!$platFlowCount && $redis->expire($platKey,self::$platITime); // 设置锁的有效时间
return json(['code'=>1,'msg'=>'通过']);
}
/**
* @param $mer_no
* @param $oneITime
* @param $oneIMax
* @return bool
* @throws Exception
*/
public static function redis_lock_single_limit($mer_no,$oneITime,$oneIMax)
{
$redis = self::getRedisConn();
// ... 针对单个商户户实现的访问锁
$key = md5($mer_no.':'.self::KEY);
$userFlowCount = $redis->get($key); // 单个用户访问次数
if($userFlowCount){
if($userFlowCount >= $oneIMax){
return false;
}
}
$redis->incr($key);// ++1 次访问次数
!$userFlowCount && $redis->expire($key,$oneITime);// 设置锁的有效时间
return true;
}
/**
* @param string $strIp
* @param int $intPort
* @return \Redis
* @throws Exception
*/
public static function getRedisConn($strIp = self::REDIS_CONFIG_HOST, $intPort = self::REDIS_CONFIG_PORT)
{
try {
if (!extension_loaded('redis')) {
throw new \BadFunctionCallException('not support: redis');
}
$objRedis = new \Redis();
$objRedis->connect($strIp, $intPort);
return $objRedis;
}catch (Exception $exception){
throw new Exception($exception->getMessage());
}
}
}
~~~
```
- 空白目录
- thinkphp5
- tools-常用类库
- redis类库
- Excel类库
- File文件操作类库
- Http请求类库
- Maile邮件发送
- Hooks行为钩子
- 七牛云
- 随机数和字符串生成
- 字符串处理
- 时间类处理
- tree型转换
- 工具类库
- 文件打包下载
- 常用功能
- 文件上传
- php生成word文档
- elasticsearch 基本搜索
- 使用jwt开发API接口
- 安装模及搭建
- ApiCheck.php
- ApiCheckLogin.php
- common.php
- Login.php
- Comment.php
- 汉字转拼音
- 安装使用
- Pinyin类
- elasticsearch操作
- 常用方法
- 数据源生成layui-select
- 获取自定义配置项
- 百度编辑器
- 格式化文件大小
- 多语言设置
- hook监听
- 域名绑定到模块
- thinkphp6
- 文件上传
- tp5totp6
- 创建路径
- 获取类所有方法
- password_hash加密验证
- 生成 qrcode
- 邮件发送
- 获取QQ信息
- GoogleAuthenticator
- redis限流
- redis 加锁
- 百度翻译
- QueryList爬取数据
- 获取时间类
- 命令
- Git常用命令
- easyswoole
- pix_qrcode
- 验证 cpf,cnpj
- php常用方法
- 日志
- 卡通头像
- 两位小数
- 图片转base64
- auth加密解密
- phpoffice/phpspreadsheet导入导出
- fastadmin
- 树结构
- 单选框
- 复选框
- 二级搜索
- select选择框
- selectpage选中回调事件
- 标签添加
- 修改where条件
- 表格列表中添加input框
- selectpage事件
- fieldlist
- js操作
- test_js
- 多表格
- template模板