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 08 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
PHP IPV6正则表达式验证代码
Feb 16 PHP
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
mac下使用brew配置环境的步骤分享
May 23 PHP
php操作memcache缓存方法分享
Jun 03 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
Jan 15 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
php基于协程实现异步的方法分析
Jul 17 PHP
详解PHP Swoole与TCP三次握手
May 27 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 header函数的常用http头设置
2015/06/25 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP简单遍历对象示例
2016/09/28 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
什么是JavaScript
2009/08/13 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
简单介绍Python中的JSON使用
2015/04/28 Python
Python中作用域的深入讲解
2018/12/10 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
顶撞领导检讨书
2014/01/29 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
《社戏》教学反思
2014/04/15 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
农业生产宣传标语
2014/10/08 职场文书
展览会邀请函
2015/02/02 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Java8中Stream的一些神操作
2021/11/02 Java/Android
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL