固定窗口

固定窗口就是记录一个固定的时间窗口内的操作次数,操作次数超过阈值则进行限流。

def fix_window_limit(redis_obj, period, max_count):
"""
固定窗口
:param redis_obj:redis连接对象
:param period: 周期 秒为单位
:param max_count: 最大请求数量数量
:return:
"""
key = "global_limit"
current = redis_obj.get(key)
if current:
current = int(current.decode('utf-8'))
if current >= max_count:
return False
value = r.incr(key)
if value == 1:
r.expire(key, period)
return True

滑动窗口

滑动窗口就是记录一个滑动的时间窗口内的操作次数,操作次数超过阈值则进行限流。

def rolling_window_limit(redis_obj, period, max_count):
"""
滑动窗口
:param redis_obj:redis连接对象
:param period: 周期 秒为单位
:param max_count: 最大请求数量数量
:return:
"""
key = "global_limit"
now_time = int(time.time()*1000)
# 使用管道
pipe = redis_obj.pipeline()
pipe.multi()
# 添加当前操作当zset中
pipe.zadd(key, {str(now_time): now_time})
# 整理zset,删除时间窗口外的数据
pipe.zremrangebyscore(key, 0, now_time - period * 1000)
# 获取当前窗口的数量
pipe.zcard(key)
pipe.expire(key, period+1)
result = pipe.execute()
pipe.close()
return result[-2] <= max_count

python 实现限流的更多相关文章

  1. 三 drf 认证,权限,限流,过滤,排序,分页,异常处理,接口文档,集xadmin的使用

    因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py createsuperuser 创建管理员以后,访问admin站点 ...

  2. drf 认证、权限、限流、过滤、排序、分页器

    认证Authentication 准备工作:(需要结合权限用) 1. 需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py creates ...

  3. 高可用服务设计之二:Rate limiting 限流与降级

    <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <nginx限制 ...

  4. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  5. drf06 认证Authentication 权限Permissions 限流Throttling

    为了方便接下来的学习,我们创建一个新的子应用 four python manage.py startapp four 因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并 ...

  6. 限流 - Guava RateLimiter

    2019独角兽企业重金招聘Python工程师标准>>> 限流 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦并发访问/请求达到限制速率或者 ...

  7. nginx安全:用limit_req_zone/limit_req限制连接速率(流量控制/限流)

    一,limit_req的用途: 1,官方文档地址: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html 2,用途: 限制用户在给定 ...

  8. day74:drf:drf其他功能:认证/权限/限流/过滤/排序/分页/异常处理&自动生成接口文档

    目录 1.django-admin 2.认证:Authentication 3.权限:Permissions 4.限流:Throttling 5.过滤:Filtering 6.排序:OrderingF ...

  9. WebApiThrottle限流框架使用手册

    阅读目录: 介绍 基于IP全局限流 基于IP的端点限流 基于IP和客户端key的端点限流 IP和客户端key的白名单 IP和客户端key自定义限制频率 端点自定义限制频率 关于被拒请求的计数器 在we ...

  10. [WCF编程]9.性能与限流

    一.性能概述 WCF服务的性能取决于很多因素.出了CPU.RAM和网络性能等常见的因素外,实例上下文模式.并发模式.数据契约的设计或使用的绑定等与WCF有关的因素都起着重要的作用. 实例上下文模式用来 ...

随机推荐

  1. CentOS7环境saltstack安装配置

    一.安装epel yum源 yum -y install epel-release yum clean all yum makecache 二.安装 saltstack-master 并配置 1.安装 ...

  2. This beta version of Typora is expired, please download and install a newer version. 实测最简单有效的方案

    This beta version of Typora is expired, please download and install a newer version. 实测最简单有效的方案 一.问题 ...

  3. 使用WebApi+Vue3从0到1搭建《权限管理系统》:二、搭建JWT系统鉴权

    视频地址:[WebApi+Vue3从0到1搭建<权限管理系统>系列视频:搭建JWT系统鉴权-哔哩哔哩] https://b23.tv/R6cOcDO qq群:801913255 一.在ap ...

  4. 手动给docusaurus添加一个搜索

    新版博客用docusaurus重构已经有些日子了,根据docusaurus的文档上也申请了Algolia,想一劳永逸的解决博客的搜索问题.但是流水有意,落花无情. algolia总是不给我回复,我只能 ...

  5. 技术人如何"结构化"高效思考?

    1 前言 你是否在解决问题时,常常觉得脑子很乱,很多零散的信息迸发出来,但就是无法形成解决方案. 之所以这样,原因就在于,我们的大脑处理不了太多零散而复杂的信息.人类大脑在处理信息的时候,有两个规律: ...

  6. stm32串口晶振不对输出乱码+汇承HC-14lora模块

    最近要用到一个lora无线透传模块,然后就先用两个32开发板(用的STM32F103C8T6)试试简单的收发数据.结果,第一步串口发送一句话就寄了,我串口打印了"hi",结果出现了 ...

  7. 剑指offer51(Java)-数组中的逆序对(困难)

    题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例1: 输入: [7,5,6,4] 输出: 5 限制: 0 &l ...

  8. 深入解析 Dubbo 3.0 服务端暴露全流程

    ​简介: 随着云原生时代的到来,Dubbo 3.0 的一个很重要的目标就是全面拥抱云原生.正因如此,Dubbo 3.0 为了能够更好的适配云原生,将原来的接口级服务发现机制演进为应用级服务发现机制. ...

  9. 在 VisualStudio 给文件起一个带分号的文件名会怎样

    小伙伴都知道在 Windows 下是支持文件名使用分号的,而写过 Roslyn 的小伙伴都知道,在 csproj 项目里面使用分号分割数组.那么在 VS 里面将一个文件名添加分号会如何?下面让咱写写看 ...

  10. C51笔记-数码管#动态扫描#静态显示#中断#定时器