php limit限流,php+redis 限流
## 思路
### 用户请求限限流(同接口访问时间限制)
> redis key 接品名+ user_id 每访问一次+1 过期时间为限制访问时间
```php
_user_id = (int)$params['user_id'];
$this->_search_key = $params['apiName'].$this->_prefix;
$this->_key = $this->_search_key.$params['user_id'];
$this->_expireat_time = 60;##配置项
$this->_user_max_limit = 100;##配置项
$this->_max_limit = 100;##配置项
}
/**
* [userLimit 是否达到单用户接口请求峰值]
* @Author Jerry (wx621201)
* @DateTime 2019-08-02T15:35:52+0800
* @Example eg:
* @return [type] [description]
*/
public function checkUserLimit(){
if($this->_user_max_limit==0) return true;//0不限流,不存在防刷,可以购买
##如果不存在,说明超过一分钟,给SQL拦截
$matchNum = $this->_exists();
$matchNum = (int)$matchNum?$matchNum:0;
if($matchNum>$this->_user_max_limit) return false;##达到限流条件
$this->_set($matchNum+1);
return true;##默认通过
}
/**
* [countLimit 是否达到用户限流数]
* @Author Jerry (c84133883)
* @DateTime 2019-08-05T10:26:39+0800
* @Example eg:
* @return [type] [description]
*/
public function checkCountLimit(){
if($this->_max_limit==0) return true;//0不限流
if($this->_userCount>$this->_max_limit){
return false;
}else{
return true;
}
}
/**
* [_userCount 总用户数]
* @Author Jerry (wx621201)
* @DateTime 2019-08-02T15:41:08+0800
* @Example eg:
* @return [type] [description]
*/
private function _userCount(){
$list = redis::scene($this->_scene)->keys($this->_search_key.'*');
return count($list);
}
/**
* [_set description]
* @Author Jerry (wx621201)
* @DateTime 2019-08-02T15:45:51+0800
* @Example eg:
* @param [type] $key [description]
* @param [type] $value [description]
* @param integer $time [description]
* @param string $scene [description]
*/
private function _set($value){
redis::scene($this->_scene)->set($this->_key,$value);
##处理过期时间
$expiretime = time()+(float)$this->_expireat_time;##1分钟
redis::scene($this->_scene)->expireat($this->_key,$expiretime);
return ture;
}
/**
* [_exists 检查是否存在]
* @Author Jerry (wx621201)
* @DateTime 2019-08-02T15:45:54+0800
* @Example eg:
* @param [type] $key [description]
* @param string $scene [description]
* @return [type] [description]
*/
private function _exists(){
if(!redis::scene($this->_scene)->exists($this->_key)||!redis::scene($this->_scene)->get($this->_key)){
return false;
}
return redis::scene($this->_scene)->get($this->_key);
}
}
```
### 总的用户限流
#### 求合上面的key数,得出当前所在的用户数量
### 所有请求限流
#### 思路1 通过IP限流
php limit限流,php+redis 限流相关推荐
- 分布式限流实战--redis实现令牌桶限流
这篇文章我们主要是分析一下分布式限流的玩法. 因为限流也是一个经典用法了. 1.微服务限流 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.缓存.降级和限流是保护微服务系统运行稳定性的三大利器 ...
- java redis 限流_Redis——限流算法之滑动窗口、漏斗限流的原理及java实现
限流的意义 限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子.限流可以保证系统的稳定,限制恶意请求,防止因为流量暴增导致系统瘫 ...
- Redis限流接口防刷
Redis限流接口防刷 Redis 除了做缓存,还能干很多很多事情:分布式锁.限流.处理请求接口幂等性...太多太多了- 大家好,我是llp,许久没有写博客了,今天就针对Redis实现接口限流做个记录 ...
- Redis(六)——限流算法:滑动时间窗口限流和漏斗限流
本文主要总结自<redis深度历险> 限流的意义 限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子.限流可以保证系 ...
- Redis:限流算法
一.限流算法分类 简单限流算法 漏斗限流算法(令牌桶算法) 分布式漏斗限流算法(分布式令牌桶算法) 二.简单限流算法 1. 问题引入 系统要限定用户的某个行为在指定的时间里只能允许发生 N 次,如何使 ...
- 【限流01】限流算法理论篇
微服务就是将复杂的大应用拆分成小的应用,这样做的好处是各个应用之间独立开发.测试.上线,互不影响.但是服务拆分之后,带来的问题也很多,我们需要保障微服务的正常运行,就需要进行服务治理.常用手段有:鉴权 ...
- 高并发解决方案(缓存、降级、限流)之限流笔记
转载自:jinnianshilongnian 高并发系统时有三把利器用来保护系统:缓存.降级和限流.缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹:而降级是当服务出问题或 ...
- 【限流02】限流算法实战篇 - 手撸一个单机版Http接口通用限流框架
本文将从需求的背景.需求分析.框架设计.框架实现几个层面一步一步去实现一个单机版的Http接口通用限流框架. 一.限流框架分析 1.需求背景 微服务系统中,我们开发的接口可能会提供给很多不同的系统去调 ...
- java网关限流_网关限流使用
### POM 依赖 这里一定要注意,是网关引入的redis-reactive,背压模式的redis. ``` org.springframework.boot spring-boot-starter ...
最新文章
- HDU 5239 上海大都会 D题(线段树+数论)
- 今晚直播 | 清华大学NLP组秦禹嘉:基于自然语言解释的数据增强
- [渝粤教育] 中国地质大学 事故应急救援 复习题
- python爬取天气预报并发送短信_Python3爬虫教程之利用Python实现发送天气预报邮件...
- 一个自己主动依据xcode中的objective-c代码生成类关系图的神器
- JavaWeb检测注册内容是否在数据库中有相同的内容
- ubuntu和win7共享文件
- [转]验证码识别技术
- 2023年最新最全 VSCode 插件推荐
- 什么是分布式,分布式和集群的区别又是什么?
- 翻转课堂融入计算机课,“翻转课堂”教学模式在职业院校计算机课程中的应用...
- 电脑PC软件 EXE软件文件加密工具
- 计算机弹奏春风十里报新年,春风吹十里,好运新一年〈春风十里报新年〉接个吻,开一枪/火鸡/吕口口/Lambert/杨胖雨「尤克里里+吉他弹唱谱」...
- 利用Golang可选参数实现可选模式
- 中国古诗文Python爬虫JJJ
- JIT-即时编译技术
- FTDI可实现USB转并口的芯片
- 【沁恒WCH CH32V307V-R1在MounRiver Studio上环境配置教程】
- 航天器轨道力学理论与方法笔记
- 汽车名词解释-发动机参数(2)
热门文章
- android应用资源可以分为两大类,Android 应用资源(一)
- oracle登录账号和密码,oracle 登录账号与密码oracle按照中文排序
- angularjs与PHP,我应该混合AngularJS与PHP框架吗?
- java 前端页面传过来的值怎么防止篡改_反爬虫,到底是怎么回事儿?
- Dockerfile----ubuntu-java
- 送一台自用笔记本电脑!新款
- VIP到131970年过期就离谱~
- 万字综述,核心开发者全面解读PyTorch内部机制
- ansys 帮助文档_ANSYS 2020 R1版帮助文档简介
- 机器学习-转换器与估计器05