PHP实现redis限制单ip、单用户的访问次数功能示例


Posted in PHP onJune 16, 2018

本文实例讲述了PHP实现redis限制单ip、单用户的访问次数功能。分享给大家供大家参考,具体如下:

有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次

类似于这样的需求很容易用Redis来实现

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth("php001");
//这个key记录该ip的访问次数 也可改成用户id
//$key = 'userid_11100';
$key=get_real_ip();
//限制次数为5
$limit = 5;
$check = $redis->exists($key);
if($check){
  $redis->incr($key);
  $count = $redis->get($key);
  if($count > 5){
    exit('请求太频繁,请稍后再试!');
  }
}else{
  $redis->incr($key);
  //限制时间为60秒
  $redis->expire($key,60);
}
$count = $redis->get($key);
echo '第 '.$count.' 次请求';
//获取客户端真实ip地址
function get_real_ip(){
  static $realip;
  if(isset($_SERVER)){
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
      $realip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }else if(isset($_SERVER['HTTP_CLIENT_IP'])){
      $realip=$_SERVER['HTTP_CLIENT_IP'];
    }else{
      $realip=$_SERVER['REMOTE_ADDR'];
    }
  }else{
    if(getenv('HTTP_X_FORWARDED_FOR')){
      $realip=getenv('HTTP_X_FORWARDED_FOR');
    }else if(getenv('HTTP_CLIENT_IP')){
      $realip=getenv('HTTP_CLIENT_IP');
    }else{
      $realip=getenv('REMOTE_ADDR');
    }
  }
  return $realip;
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php一些公用函数的集合
Mar 27 PHP
php xml文件操作实现代码(二)
Mar 20 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
javascript 小型动画组件与实现代码
Jun 02 PHP
PHP学习笔记之一
Jan 17 PHP
优化php效率,提高php性能的一些方法
Mar 24 PHP
PHP里的中文变量说明
Jul 23 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
Nov 21 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
php循环创建目录示例分享(php创建多级目录)
Mar 04 PHP
详解PHP中的状态模式编程
Aug 11 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 #PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 #PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 #PHP
PHP堆栈调试操作简单示例
Jun 15 #PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 #PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 #PHP
基于swoole实现多人聊天室
Jun 14 #PHP
You might like
PHP正则验证Email的方法
2015/06/15 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
jquery 选项卡效果 新手代码
2011/07/08 Javascript
js 函数的副作用分析
2011/08/23 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python打开网页和暂停实例
2014/09/30 Python
在Python中调用ggplot的三种方法
2015/04/08 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
python中实现控制小数点位数的方法
2019/01/24 Python
django和vue实现数据交互的方法
2019/08/21 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
校园门卫岗位职责
2013/12/09 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
个人贷款担保书
2014/04/01 职场文书
户外活动总结范文
2014/04/30 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
离婚财产分配协议书
2014/10/21 职场文书
2014年社区工作总结
2014/11/18 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL