文档章节

用redis实现API访问频率的限制

aibati2008
 aibati2008
发布于 2016/06/16 15:02
字数 398
阅读 1398
收藏 6

    一般对外开放的API需要限制访问频率,主要有两方面目的:

1. 防止短时间内请求过多对接口压力大影响到其正常使用, 例如单用户一分钟之内只能访问多少次。
2. 限制测试用户使用接口的单日访问次数,例如单用户一天只能访问多少次.

  这样的需求用redis来做的话应该是很合适的.当用户量很多的时候,计数量会很大,但这些数据并不需要长久保存,也不用写到库里.

 

#coding:utf-8
#!/usr/bin/env python

import redis,sys

def api_count_check(IP):
    key=IP+':api_name:api_count'
    pool = redis.ConnectionPool(host='192.168.64.18', port=6379,db=0,password=123)
    r = redis.Redis(connection_pool=pool)
    limit=100
    expired_time=60
    check=r.exists(key)
    isExcced=0
    if check==True:
        r.incr(key)
        count = int(r.get(key))
        if count > limit:
            isExcced=1
            sys.exit(0)
    else:
        r.set(key,1)
        r.expire(key,expired_time)
    return isExcced

if __name__ == '__main__':
    for i in range(1,101):
	    api_count_check('user1')
        # API function
        print 'this is the API function!'

expired_time表示key的过期时间为60秒, limit表示限制访问次数. 以上可以实现在1分钟内单个IP用户最多只能访问API 100次, 进一步应用可以自行扩展.

© 著作权归作者所有

aibati2008
粉丝 14
博文 87
码字总数 61726
作品 0
成都
技术主管
私信 提问
API访问频率限制的解决方案

有时候我们需要限制一个API访问的频率,例如单用户一分钟之内只能访问多少次。 类似于这样的需求很容易用Redis来实现。 <?php require('predis/src/Autoloader.php'); $redis = new PredisC...

crazymus
2015/11/24
5.3K
8
通过 lua 进行 nginx redis 访问控制

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

zzc052
2018/06/29
0
0
php中利用redis限制接口请求频率

php中利用redis限制接口请求频率 沧海一粟2018-03-141 阅读 接口PHPredis限制 connect('127.0.0.1', 6379); return $redis; } function getApiLimit($api, $default = '2000') { //接口名称 ......

沧海一粟
2018/03/14
0
0
使用php redis实现简单的注册登录功能

主要使用的是hash结构来存储用户数据,列表来存储访问的频率 email.to.id存储的是邮箱和用户id的对应关系 user:{$userID}存储的是用户的email、password、nickname基本数据 retrieve.passwor...

RitaChen
2016/11/16
269
0
使用Redis实现访问频率控制

这里使用Redis递减配合适当的过期策略来实现 用户每次调用API里,都需要判断access_times是否大于0 当返回数值小于等于0时,即不在允许用户访问,直到accesstimes重新初始化为大于0的数值,由...

zlikun
2016/07/15
651
0

没有更多内容

加载失败,请刷新页面

加载更多

手持式人证核验设备助力国家安全系统

手持式人证核验设备,是针对公共安全领域的移动化身份核验、追逃等需求推出的手持式一体化设备。其特点是具备人员信息采集、存储和比对功能,将采集到的人脸信息与居民身份证芯片中的人脸信息...

非思丸智能FaceTo
11分钟前
2
0
好程序员web前端教程分享JavaScript简写方法

今天好程序员web前端教程为大家分享JavaScript简写方法,小伙伴们快来看一看吧。 1.三元操作符 当想写if...else语句时,使用三元操作符来代替。 constx =20; let answer; if(x >10) { answer...

好程序员官网
14分钟前
3
0
PHP面试题2019年小米工程师面试题和答案解析

一、单选题(共29题,每题5分) 1.PHP面向对象方法重写描述错误的是? A、子类必须继承父类 B、子类可以重写父类已有方法 C、重写之后子类会调用父类方法 D、子类也可以具有与父类同名的属性...

一个PHP程序媛
18分钟前
2
0
K8s 从懵圈到熟练 – 镜像拉取这件小事

导读:相比 K8s 集群的其他功能,私有镜像的自动拉取,看起来可能是比较简单的。而镜像拉取失败,大多数情况下都和权限有关。所以,在处理相关问题的时候,我们往往会轻松的说:这问题很简单...

Mr_zebra
18分钟前
3
0
分布式锁简单入门以及实现方法

学过Java多线程的应该都知道什么是锁,没学过的也不用担心,Java中的锁可以简单的理解为多线程情况下访问临界资源的一种线程同步机制。 在学习或者使用Java的过程中进程会遇到各种各样的锁的...

yanlijun_java
21分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部