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 相关文章推荐
使用Sphinx对索引进行搜索
Jun 25 PHP
phpmailer中文乱码问题的解决方法
Apr 22 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
PHP批量删除jQuery操作
Jul 23 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中Smarty模板初体验
2011/08/08 PHP
php简单的会话类代码
2011/08/08 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
php实现简易计算器
2020/08/28 PHP
初学Javascript的一些总结
2008/11/03 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python如何使用unittest测试接口
2018/04/04 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
德国机车企业:FC-Moto
2017/10/27 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
J2EE中的容器都包括哪些
2013/08/21 面试题
高级文秘工作总结的自我评价
2013/09/28 职场文书
计算机科学与技术应届生求职信
2013/11/07 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
初婚未育证明样本
2014/10/24 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
大学运动会加油稿
2015/07/22 职场文书
学习党章心得体会2016
2016/01/15 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
Python3 类型标注支持操作
2021/06/02 Python
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL