/**
* 频率控制函数
* @param string $product 保持唯一
* @param string $key 限制频率的维度 比如uid
* @param int $millisecond 毫秒间隔内只可以访问1次
* @return bool true-可以正常访问 false-命中频率控制
*/
function controlRate($product, $key, $millisecond) {
if (empty($product) || empty($key) || !is_int($millisecond) || $millisecond <= 0) {
return true;
} $millTime = intval(microtime(true) * 1000);
$key = sprintf('ctrl_%s_%s', $product, $key); $redis = new Redis();
$redis->connect('redis');
$redis->auth('123456'); $lastTimeRes = $redis->get($key);
if ($lastTimeRes === false) {
$addRes = $redis->setNx($key, $millTime);
// 此处有设置失败的风险
$redis->expire($key, 86400);
return $addRes;
} // 若存在 则比对现在的时间 若频率超过x毫秒 则提示过于频繁
$nowTime = $millTime;
if ($nowTime - intval($lastTimeRes) < $millisecond) {
return false;
} // 记录最新时间
return $redis->setEx($key, 86400, $millTime);
}
 

最新文章

  1. 比较两个数据库表table结构不同之处
  2. SharePoint 2013 开发——其他社交功能
  3. 剑指架构师系列-tomcat6通过伪异步实现connector
  4. 20145317彭垚《Java程序设计》实验二
  5. sdutoj 2154 Shopping
  6. HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))
  7. java web每天定时执行任务(四步轻松搞定)
  8. ABP领域层——仓储(Repositories)
  9. Cocos2d-x 2.3.3版本 FlappyBird
  10. js小知识-replace的回调函数
  11. 聊聊真实的 Android TV 开发技术栈
  12. C# 动态生成word文档
  13. day09 函数学习
  14. elastic-job详解(一):数据分片
  15. Object 标签遮挡 Div 显示
  16. 20165304《Java程序设计》第九周学习总结
  17. 数据库设计和ER模型-------之关系模型的基本概念(第二章)
  18. drools 的一个小demo
  19. linux,强大的history命令
  20. 关于Unity中的transform组件(二)

热门文章

  1. 修复右键批量打印PDF文件的功能
  2. Hyper-V虚拟机在Win2019server中共用一个公网IP
  3. 全链路压测SOP
  4. 修改系统hosts文件访问github
  5. python 查找文件夹下以特定字符开头的某类型文件 - os.walk
  6. anr查看的一种方法
  7. go interface nil 比较
  8. C# 开源NuGet插件
  9. 更改svn地址
  10. Java 8 stream 做大于几的统计