文档章节

API访问频率限制的解决方案

crazymus
 crazymus
发布于 2015/11/24 15:43
字数 250
阅读 5311
收藏 17
有时候我们需要限制一个API访问的频率,例如单用户一分钟之内只能访问多少次。

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

<?php 

require('predis/src/Autoloader.php');

$redis = new Predis\Client(array(
	'scheme' => 'tcp',
	'host'   => '127.0.0.1',
	'port'   => '6379'
));

$redis->auth('123456');

//这个key记录该用户1的访问次数 
$key = 'user:1:api_count';

//限制次数为10 
$limit = 10;

$check = $redis->exists($key);
if($check){
	$redis->incr($key);
	$count = $redis->get($key);
	if($count > 10){
		exit('your have too many request');
	}
}else{
	$redis->incr($key);
	//限制时间为60秒 
	$redis->expire($key,60);
}

$count = $redis->get($key);
echo 'You have '.$count.' request';

//......
//API业务逻辑 
echo '<br/>';
echo 'Hello,World!This is the api content.';
?>



上面的代码实现了,在60秒内单用户最多只能访问API 10次。这样的需求使用缓存来处理是非常合适的,当用户量很多的时候,计数量会很大,而且这些数据并不需要长久保存,用数据库存储显然不划算。

© 著作权归作者所有

crazymus

crazymus

粉丝 71
博文 80
码字总数 111033
作品 8
武汉
后端工程师
私信 提问
加载中

评论(8)

w
woffee
楼主,你帮了我,我专门注册个号表示感谢,这网站特么告诉我“注册一小时后才能评论”
9
931070318
nihao
9
931070318
nihao
9
931070318
nihao
9
931070318
nihao
9
931070318
nihao
9
931070318
nihao
9
931070318
nihao
通过 lua 进行 nginx redis 访问控制

1. 需求分析 1. Nginx来处理访问控制的方法有多种,实现的效果也有多种,访问IP段,访问内容限制,访问频率限制等。 2. 用Nginx+Lua+Redis来做访问限制主要是考虑到高并发环境下快速访问控制...

zzc052
2018/06/29
0
0
[转]iframe跨域通信的通用解决方案

一、背景 在这个Web页面越来越丰富的时代,页面通过iframe嵌入其他的页面也越来越常见。但由于浏览器同源策略的限制,不同域之间属性和操作是无法直接交互的,所以在这个时候,开发者多多少少...

Gmupload
2013/09/24
112
0
编写 Node.js Rest API 的 10 个最佳实践

Node.js 除了用来编写 WEB 应用之外,还可以用来编写 API 服务,我们在本文中会介绍编写 Node.js Rest API 的最佳实践,包括如何命名路由、进行认证和测试等话题,内容摘要如下: 正确使用 ...

前端全栈开发学习
2018/11/09
0
0
James Iter/sparrow

Sparrow 分布式数据库中间件 简介 在类似订单的业务环境中,订单的记录会随着时间不断的增长。而走完整个周期的订单,时间越久,被访问到的机率就越小。 但越新的订单,访问频率越高。基于这...

James Iter
2016/01/19
0
0
简析Web应用6种主要漏洞及解决方案

编者按:本文转载自李松峰老师的博客 Web应用基于C/S(Client/Server)服务模型搭建:客户端发送请求,服务端负责响应。一般客户端就是浏览器,但可以向服务器发送请求的软件则远远不限于浏览...

奇舞周刊
2018/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

高级技术题整理

1. 为什么等待和通知是在 Object 类而不是 Thread 中声明的? 一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢。Java编程的常识和深入了解有助于回答这种棘手...

泉天下
24分钟前
2
0
Elasticsearch

1 、下载 下载地址:https://www.elastic.co/downloads/past-releases 2 、安装 elasticsearch无需安装,解压即用。 3.运行 进入elasticsearch/bin目录,可以看到下面的执行文件: 双击运行 ...

少年已不再年少
24分钟前
5
0
Spring Boot 2.X(七):Spring Cache 使用

Spring Cache 简介 在 Spring 3.1 中引入了多 Cache 的支持,在 spring-context 包中定义了org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 两个接口来统一不同......

朝雾轻寒
26分钟前
3
0
java路径问题

在Java中有几种常见获取文件路径的方法,此处演示下用法和效果。 测试项目目录结构如右图: 1、使用File类 File file = new File("");// Java项目中-->D:\WorkSoftware\Workspace\EclipseP...

随心の随缘
28分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部