## 思路

### 用户请求限限流(同接口访问时间限制)

> 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 限流相关推荐

  1. 分布式限流实战--redis实现令牌桶限流

    这篇文章我们主要是分析一下分布式限流的玩法. 因为限流也是一个经典用法了. 1.微服务限流 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.缓存.降级和限流是保护微服务系统运行稳定性的三大利器 ...

  2. java redis 限流_Redis——限流算法之滑动窗口、漏斗限流的原理及java实现

    限流的意义 限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子.限流可以保证系统的稳定,限制恶意请求,防止因为流量暴增导致系统瘫 ...

  3. Redis限流接口防刷

    Redis限流接口防刷 Redis 除了做缓存,还能干很多很多事情:分布式锁.限流.处理请求接口幂等性...太多太多了- 大家好,我是llp,许久没有写博客了,今天就针对Redis实现接口限流做个记录 ...

  4. Redis(六)——限流算法:滑动时间窗口限流和漏斗限流

    本文主要总结自<redis深度历险> 限流的意义 限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子.限流可以保证系 ...

  5. Redis:限流算法

    一.限流算法分类 简单限流算法 漏斗限流算法(令牌桶算法) 分布式漏斗限流算法(分布式令牌桶算法) 二.简单限流算法 1. 问题引入 系统要限定用户的某个行为在指定的时间里只能允许发生 N 次,如何使 ...

  6. 【限流01】限流算法理论篇

    微服务就是将复杂的大应用拆分成小的应用,这样做的好处是各个应用之间独立开发.测试.上线,互不影响.但是服务拆分之后,带来的问题也很多,我们需要保障微服务的正常运行,就需要进行服务治理.常用手段有:鉴权 ...

  7. 高并发解决方案(缓存、降级、限流)之限流笔记

    转载自:jinnianshilongnian 高并发系统时有三把利器用来保护系统:缓存.降级和限流.缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹:而降级是当服务出问题或 ...

  8. 【限流02】限流算法实战篇 - 手撸一个单机版Http接口通用限流框架

    本文将从需求的背景.需求分析.框架设计.框架实现几个层面一步一步去实现一个单机版的Http接口通用限流框架. 一.限流框架分析 1.需求背景 微服务系统中,我们开发的接口可能会提供给很多不同的系统去调 ...

  9. java网关限流_网关限流使用

    ### POM 依赖 这里一定要注意,是网关引入的redis-reactive,背压模式的redis. ``` org.springframework.boot spring-boot-starter ...

最新文章

  1. HDU 5239 上海大都会 D题(线段树+数论)
  2. 今晚直播 | 清华大学NLP组秦禹嘉:基于自然语言解释的数据增强
  3. [渝粤教育] 中国地质大学 事故应急救援 复习题
  4. python爬取天气预报并发送短信_Python3爬虫教程之利用Python实现发送天气预报邮件...
  5. 一个自己主动依据xcode中的objective-c代码生成类关系图的神器
  6. JavaWeb检测注册内容是否在数据库中有相同的内容
  7. ubuntu和win7共享文件
  8. [转]验证码识别技术
  9. 2023年最新最全 VSCode 插件推荐
  10. 什么是分布式,分布式和集群的区别又是什么?
  11. 翻转课堂融入计算机课,“翻转课堂”教学模式在职业院校计算机课程中的应用...
  12. 电脑PC软件 EXE软件文件加密工具
  13. 计算机弹奏春风十里报新年,春风吹十里,好运新一年〈春风十里报新年〉接个吻,开一枪/火鸡/吕口口/Lambert/杨胖雨「尤克里里+吉他弹唱谱」...
  14. 利用Golang可选参数实现可选模式
  15. 中国古诗文Python爬虫JJJ
  16. JIT-即时编译技术
  17. FTDI可实现USB转并口的芯片
  18. 【沁恒WCH CH32V307V-R1在MounRiver Studio上环境配置教程】
  19. 航天器轨道力学理论与方法笔记
  20. 汽车名词解释-发动机参数(2)

热门文章

  1. android应用资源可以分为两大类,Android 应用资源(一)
  2. oracle登录账号和密码,oracle 登录账号与密码oracle按照中文排序
  3. angularjs与PHP,我应该混合AngularJS与PHP框架吗?
  4. java 前端页面传过来的值怎么防止篡改_反爬虫,到底是怎么回事儿?
  5. Dockerfile----ubuntu-java
  6. 送一台自用笔记本电脑!新款
  7. VIP到131970年过期就离谱~
  8. 万字综述,核心开发者全面解读PyTorch内部机制
  9. ansys 帮助文档_ANSYS 2020 R1版帮助文档简介
  10. 机器学习-转换器与估计器05