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

基于 Redis 实现滑动窗口的限流

⏳ 限流场景:突发流量,恶意流量,业务本身需要

基于 Redis 实现滑动窗口的限流是一种常见且高效的做法。Redis 是一种内存数据库,具有高性能和支持原子操作的特点,非常适合用来实现限流功能。下面是一个使用 Redis 实现基于滑动窗口的限流算法的简单示例:

滑动窗口

📐其实这个方法就是把上边的粒度进行切分,切分成更小力度的计数器,就像是上边的切分成一小块一小块,每块时间超出了指定的请求就阻挡在外,越小力度,则限流越好。

import time
import redisclass SlidingWindowRateLimiter:def __init__(self, window_size, limit, redis_conn):self.window_size = window_sizeself.limit = limitself.redis_conn = redis_conndef allow_request(self, key):current_time = int(time.time() * 1000)pipeline = self.redis_conn.pipeline()pipeline.zadd(key, {current_time: current_time})pipeline.zremrangebyscore(key, '-inf', current_time - self.window_size)pipeline.expire(key, self.window_size / 1000 + 1)  # 设置过期时间,略大于窗口大小pipeline.execute()count = self.redis_conn.zcard(key)if count <= self.limit:return Trueelse:return False

在这个示例中,我们利用 Redis 的有序集合(sorted set)来实现滑动窗口。每个请求到达时,都会向有序集合中添加当前时间戳,并通过 zremrangebyscore 方法移除超出时间窗口范围的时间戳。最后,通过 zcard 方法统计有序集合中的成员数量,从而判断是否允许新的请求。

需要注意的是,上述代码仅为示例,实际应用中可能需要考虑更多因素,比如分布式环境下的原子操作、并发访问的线程安全性、异常处理等。另外,在实际生产环境中,还可以结合 Lua 脚本和 Redis 的事务机制来实现更复杂的限流策略。

总之,基于 Redis 实现滑动窗口的限流是一种常见且高效的做法,可以有效地控制系统的并发访问量。

相关文章:

基于 Redis 实现滑动窗口的限流

⏳ 限流场景&#xff1a;突发流量&#xff0c;恶意流量&#xff0c;业务本身需要 基于 Redis 实现滑动窗口的限流是一种常见且高效的做法。Redis 是一种内存数据库&#xff0c;具有高性能和支持原子操作的特点&#xff0c;非常适合用来实现限流功能。下面是一个使用 Redis 实现…...

Camera Raw:打开图像

在图像工作流程中&#xff0c;无论是 Raw 格式图像文件还是 JPEG、TIFF 文件&#xff0c;都可以先使用 Camera Raw 打开并调整后&#xff0c;再进入其它 Adobe 软件如 Photoshop 中进行进一步的编辑和处理。 一、打开 Raw 格式图像 1、通过 Adobe Bridge 打开 在 Adobe Bridge …...

RK3588主板PCB设计学习(六)

可以在其它层对过孔进行削盘处理&#xff0c; 可以看到&#xff0c;这里有些过孔用不上&#xff0c;在这一层进行了削盘处理&#xff1a; 对于这种电源层进行铺铜操作的时候&#xff0c;如果不进行削盘处理的话这些焊盘可能导致这个电源层面不完整&#xff0c;存在割裂的风险&a…...

论文阅读(十一):CBAM: Convolutional Block Attention Module

文章目录 IntroductionConvolutional Block Attention ModuleExperimentsConclusion 论文题目&#xff1a;CBAM: Convolutional Block Attention Module&#xff08;CBAM&#xff1a;卷积注意力机制&#xff09;   论文链接&#xff1a;点击跳转   代码链接&#xff1a;Git…...

【Kubernetes】常见面试题汇总(四十八)

目录 108.考虑一家拥有非常分散的系统的跨国公司&#xff0c;希望解决整体代码库问题。您认为公司如何解决他们的问题&#xff1f; 109.我们所有人都知道从单服务到微服务的转变从开发方面解决了问题&#xff0c;但在部署方面却增加了问题。公司如何解决部署方面的问题&#x…...

Qt Creator安卓环境配置【筑基篇】

1.前言 由于我的Qt Creator目前就先的14版本IDE老是存在各种莫名奇妙的bug&#xff0c;我都已经成为官方Qt Forum官方论坛的常客了。有一说一新版本的各种设置不小心误触是真的坑死人。不说了给我小主机配置安卓环境了。小主机系统版本window11-23H,Qt-Creator版本是13.01版本…...

利用SpringBoot构建高效社区医院平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

【C++ 前缀和 数论】1590. 使数组和能被 P 整除|2038

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 质数、最大公约数、菲蜀定理 LeetCode 1590. 使数组和能被 P 整除 给你一个正整数数组 nums&#xff0c;请你移除 最短 子数组&#xff08;可以为 空&#xff09;&am…...

外部引入的 JavaScript 放置位置

部引入的 JavaScript 通常有两种常见的放置位置&#xff0c;每个位置都有其优缺点&#xff0c;具体取决于页面的需求和性能优化目标&#xff1a; 1. 放在页面的 <head> 标签中 这种方式在 HTML 文档的 <head> 部分引入 JavaScript 文件。 <head><scrip…...

【tbNick专享】虚拟机域控、成员服务器、降级等管理

在 VMware 中完成四台域控服务器、一台成员服务器的创建、降级域控为成员服务器&#xff0c;并创建子域的操作。 1. 创建四台域控和一台成员服务器 1.1 在 VMware 中创建虚拟机 启动 VMware Workstation&#xff1a; 打开 VMware Workstation&#xff0c;点击 “创建新的虚拟…...

Raspberry Pi3B+之Rpanion(gst)和ffmpeg验证

Raspberry Pi3B之Rpanion-gst和ffmpeg验证 1. 源由2. 分析3. 环境搭建步骤1&#xff1a;安装镜像步骤2&#xff1a;系统更新步骤3&#xff1a;安装numpy组件步骤4&#xff1a;安装python3-picamera2组件步骤4&#xff1a;安装cv2组件步骤5&#xff1a;安装ffmpeg组件步骤6&…...

数据结构编程实践20讲(Python版)—04队列

本文目录 04 队列 QueueS1 说明S2 示例普通队列循环队列双端队列优先队列S3 问题:基于普通队列实现的打印机任务管理Python3程序S4 问题:使用循环队列管理玩家移动轨迹Python3程序S5 问题:使用双端队列来管理文档操作历史Python3程序S6 问题:使用优先队列管理车辆调度Pytho…...

Ubuntu开机进入紧急模式处理

文章目录 Ubuntu开机进入紧急模式处理一、问题描述二、解决办法参考 Ubuntu开机进入紧急模式处理 一、问题描述 Ubuntu开机不能够正常启动&#xff0c;自动进入紧急模式&#xff08;You are in emergency mode&#xff09;。具体如下所示&#xff1a; 二、解决办法 按CtrlD进…...

解决无网条件下离线安装缺失的python包

首先在有网的机器上使用conda create --name xx pythonx.x.x 命令创建一个和目标机器(无网)一样的环境 使用 下面命令 pip download opencv-python -d C:\Users\xuhaitao\Desktop\installer pip download pyinstaller -d C:\Users\xuhaitao\Desktop\installer 在目标…...

海外媒体投稿:如何运用3种国内外媒体套餐发稿突出重围?

在当今瞬息万变的经营环境中&#xff0c;突出重围营销推广是每家企业都需要思考的问题。为了能突出重围并提升影响力&#xff0c;国内外媒体套餐内容成为了一个非常受欢迎的挑选。下面我们就为大家讲解如何运用三种不同种类的国内外媒体套餐内容来推广突出重围。 2.微博营销新浪…...

Spring DI 笔记

目录 1.什么是DI? 2.依赖注入的三种⽅式 2.1属性注⼊ 2.2构造⽅法注⼊ 2.3Setter 注⼊ 2.4三种注⼊优缺点分析 3.Autowired存在问题 1.什么是DI? DI: 依赖注⼊ 依赖注⼊是⼀个过程&#xff0c;是指IoC容器在创建Bean时, 去提供运⾏时所依赖的资源&#xff0c;⽽资源指的…...

psutil库的使用说明

前言 psutil是一个跨平台的库&#xff0c;用于获取系统的进程和系统利用率&#xff08;包括 CPU、内存、磁盘、网络等&#xff09;信息。 目录 安装 应用场景 常用方法 一、系统信息相关函数 二、进程信息相关函数 三、网络信息相关函数 四、其他实用函数 使用样例 监控应…...

PMP--三模--解题--71-80

文章目录 7.成本管理--S曲线--S曲线对累计值进行监督和报告--S曲线可以同时报告成本与进度情况。适用于预测和敏捷项目。14.敏捷--信息发射源--是一种可见的实物展示其向组织内其他成员提供信息在不干扰团队的情况下即时实现知识共享。71、 [单选] 项目经理正在为刚刚进入第三次…...

iTextPDF 一个功能强大的 Java PDF 库

iTextPDF 是一个功能强大的 Java PDF 库&#xff0c;它提供了丰富的 API 用于创建和操作 PDF 文档。以下是一些 iTextPDF 的常用功能&#xff1a; 创建 PDF 文档&#xff1a;可以创建新的 PDF 文档&#xff0c;并设置页面大小、边距、背景颜色等 。 添加文本&#xff1a;在 PD…...

QT C++ 自学积累 『非技术文』

QT C 自学积累 『非技术文』 最近一段时间参与了一个 QT 项目的开发&#xff0c;使用的是 C 语法&#xff0c;很遗憾的是我之前从来没有接触过 C &#xff0c;大学没有开过这堂课&#xff0c;也没用自己学习过&#xff0c;所有说上手贼慢&#xff0c;到现在为止其实也不是很清楚…...

Pixel Fashion Atelier部署教程:华为云ModelArts平台上的Ascend NPU适配实践

Pixel Fashion Atelier部署教程&#xff1a;华为云ModelArts平台上的Ascend NPU适配实践 1. 项目概述 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站&#xff0c;采用独特的像素艺术风格界面设计。与传统AI工具不同&#xff0c;它将图像生成…...

Pixel Mind Decoder 数据结构优化:提升批量文本情绪处理效率

Pixel Mind Decoder 数据结构优化&#xff1a;提升批量文本情绪处理效率 1. 为什么需要优化批量处理 当你需要分析成千上万条用户评论或社交媒体内容时&#xff0c;逐条调用情绪分析模型会变得非常低效。就像在快餐店点餐一样&#xff0c;一个一个处理订单远不如批量处理来得…...

Llama-3.2V-11B-cot多场景:科研论文插图理解、工程图纸解析、UI截图分析

Llama-3.2V-11B-cot多场景应用&#xff1a;科研论文插图理解、工程图纸解析、UI截图分析 1. 模型概述 Llama-3.2V-11B-cot是一款基于LLaVA-CoT论文实现的视觉语言模型&#xff0c;具备强大的图像理解和系统性推理能力。该模型采用MllamaForConditionalGeneration架构&#xf…...

Kubernetes 自动扩缩容最佳实践

Kubernetes 自动扩缩容最佳实践 一、前言 哥们&#xff0c;别整那些花里胡哨的。Kubernetes 自动扩缩容是保证应用高可用和成本优化的关键&#xff0c;今天直接上硬货&#xff0c;教你如何配置和优化自动扩缩容。 二、扩缩容类型对比 类型适用场景优势劣势HPA水平扩缩容响应…...

超表面全息显示入门避坑指南:为什么你的G-S算法迭代不收敛?

超表面全息显示实战&#xff1a;G-S算法迭代不收敛的7个关键修复策略 当你第一次在MATLAB里跑通G-S算法时&#xff0c;那种成就感就像解开了宇宙的密码——直到重建图像出现雪花般的噪点&#xff0c;或者迭代2000次后相关系数仍在0.5徘徊。这不是你的错&#xff0c;大多数教程都…...

Mac Mouse Fix技术深度解析:从底层事件处理到高级鼠标功能增强的架构演进

Mac Mouse Fix技术深度解析&#xff1a;从底层事件处理到高级鼠标功能增强的架构演进 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是一款革…...

单片机I/O口阻抗特性及其在电路设计中的关键作用

1. 阻抗基础&#xff1a;从水管到电路的理解 第一次接触阻抗概念时&#xff0c;我盯着教科书上的公式发呆了半小时。直到有天修水管时突然开窍——这不就是水管的粗细对水流的影响吗&#xff1f;在电路中&#xff0c;阻抗就是电子流动遇到的"阻力"。但和水管不同&…...

LSM303DLHC六轴IMU硬件设计与磁场校准实战指南

1. LSM303DLHC 器件概述与工程定位LSM303DLHC 是意法半导体&#xff08;STMicroelectronics&#xff09;推出的一款高集成度、低功耗的六轴惯性测量单元&#xff08;6-DoF IMU&#xff09;&#xff0c;由独立封装的三轴加速度计&#xff08;LIS3DH 兼容架构&#xff09;和三轴磁…...

python教育培训机构教务信息管理系统vue

目录功能模块分析学员管理课程管理教师管理财务管理数据统计与分析系统管理技术实现要点前端&#xff08;Vue&#xff09;后端&#xff08;Python&#xff09;数据交互示例&#xff08;API设计&#xff09;扩展功能建议项目技术支持源码获取详细视频演示 &#xff1a;文章底部获…...

从‘基’到‘坐标变换’:用Python和NumPy手把手理解线性空间的‘换地图’操作

从‘基’到‘坐标变换’&#xff1a;用Python和NumPy手把手理解线性空间的‘换地图’操作 想象一下&#xff0c;你正在使用导航软件规划路线。同一个地点&#xff0c;在高德地图和百度地图上显示的坐标可能完全不同——这就像线性代数中的基变换。本文将用Python代码和可视化手…...