当前位置: 首页 > news >正文

使用redis实时统计API调用次数,通用,不管你是php,java,python还是其他语言都可以

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

关于统计API调用次数,一直都没有比较通用的方案,那么今天我来给一个解决方案,从应用层解决,不需要开发人员去做(即使去做也不一定比这个好,别觉得哥狂妄).好了也不屁话这么多,开正题了.

0x1

ngx_dynamic_limit_req_module还是需要这个模块

cd redis-4.0**version**/deps/hiredis
make 
make install 


git clone https://github.com/limithit/ngx_dynamic_limit_req_module.git
cd ngx_dynamic_limit_req_module
git checkout limithit-API_alerts
./configure --add-module=/path/to/this/ngx_dynamic_limit_req_module 
make
make install

配置参考:
worker_processes  2;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    dynamic_limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s redis=127.0.0.1 block_second=300;
    
    server {
        listen       80;
        server_name  localhost;
        location / {
            if ($document_uri ~* "index.html"){
             dynamic_limit_req zone=one burst=100 nodelay;
            dynamic_limit_req_status 403;
                 }
				 if ($document_uri ~* "about.html"){
                dynamic_limit_req zone=one burst=30 nodelay mail_to=123@qq.com api_max=20;  #mail_to是要通知邮箱 api_max是当请求达到20次以上就发邮件通知5分钟内只发一次
                dynamic_limit_req_status 405;
                 }
            root   html;
            index  index.html index.htm;
           
        }
        error_page   403 500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

其实邮箱是选填的,不需要通知的话就不用填,如果需要全局记录的话,不需要加筛选条件document_uri 

 server {
        listen       80;
        server_name  localhost;
        location / {
            dynamic_limit_req zone=one burst=100 nodelay;
            dynamic_limit_req_status 403;
                 
				
            root   html;
            index  index.html index.htm;
           
        }
        error_page   403 500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

0x2

会按天记录每天PV,UV,AllCount是每个域名的全部请求以及每个页面的请求次数,这取决于你的筛选条件

 

0x3

大概有人会问redis能存多少个key呢又会占用多少内存呢,根据官方的描述是100万个key 大概85MB的内存

Redis最多可以处理2 ^32键,并且在实践中经过测试,每个实例至少处理2.5亿个键。

每个哈希,列表,集和排序集可以容纳2 ^32个元素。

换句话说,您的限制可能是系统中的可用内存。

所以不必但心数据日渐增多的困扰

 

转载于:https://my.oschina.net/MasterXimen/blog/2996579

相关文章:

  • Ubuntu 16.04安装httpd
  • 部署服务器系列二:Linux环境结合Docker搭建node
  • ztree实用教程
  • Java并发基础01:揭秘传统线程技术中创建线程的两种方式
  • iOS上的实时远程配置
  • 【译】 WebSocket 协议第六章——发送与接收消息(Sending and Receiving Data)
  • shell各种括号用途总结
  • 简易的RPC调用框架(大神写的)
  • 捕捉Web页面子类错误堆栈中的信息
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • 2010年9月blog汇总:敏捷个人和模型驱动开发
  • Eclipse:应该掌握的快捷键
  • 图像处理时用的卷积函数
  • asp.net web api
  • 时间复杂度分析经典问题——最大子序列和
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【知识碎片】第三方登录弹窗效果
  • Angular数据绑定机制
  • ComponentOne 2017 V2版本正式发布
  • export和import的用法总结
  • Facebook AccountKit 接入的坑点
  • HTTP请求重发
  • java8 Stream Pipelines 浅析
  • php ci框架整合银盛支付
  • Selenium实战教程系列(二)---元素定位
  • Vue2.0 实现互斥
  • 开源地图数据可视化库——mapnik
  • 前端性能优化——回流与重绘
  • 使用Swoole加速Laravel(正式环境中)
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 正则表达式-基础知识Review
  • ​Spring Boot 分片上传文件
  • $$$$GB2312-80区位编码表$$$$
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (搬运以学习)flask 上下文的实现
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • ***检测工具之RKHunter AIDE
  • .dwp和.webpart的区别
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [ACTF2020 新生赛]Upload 1
  • [AIGC] MySQL存储引擎详解