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

【PmHub面试篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现面试专题解析

你好,欢迎来到本次关于PmHub中基于Redis加Lua脚本的计数器算法限流实现的面试系列分享。在这篇文章中,我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解,强烈推荐参考之前发布的博文:【PmHub后端篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现

1 什么是限流?在什么场景下需要使用限流?

  • 限流是一种控制流量的方法,主要用于防止系统过载,保障服务的稳定性
  • 在高并发场景下,比如电商秒杀、抢购活动等,我们需要限流来防止系统被突发的大量请求压垮

2 常用算法有哪些?

常用算法包括计数器、滑动窗口、漏桶、令牌桶等。

限流算法原理优点缺点
计数器(Counter)法在固定时间窗口内统计请求数,超过阈值则拒绝请求实现简单,适用于固定时间窗口的流量控制无法处理突发流量
滑动窗口计数器法将固定时间窗口分成多个小窗口,通过滑动小窗口动态统计总请求数平滑处理流量,比固定窗口更有效实现复杂度较高
漏桶(Leaky Bucket)算法请求进入漏桶,漏桶以恒定速率出水,当桶满时新的请求被丢弃平滑突发流量,严格控制请求处理速率可能导致请求延迟增加
令牌桶(Token Bucket)算法系统按恒定速率生成令牌,请求消耗令牌,当没有令牌时请求被拒绝或排队允许突发流量处理,能长期控制处理速率实现相对复杂,需要管理令牌
漏桶与令牌桶的组合将漏桶与令牌桶结合,既能控制平均速率,又能应对突发流量综合两者优点,既能平滑流量又能应对突发流量实现复杂度更高

3 能简要介绍一下计数器算法的基本原理吗?

  • 计数器算法的基本原理是在固定时间窗口内对请求次数进行计数
  • 如果请求次数超过设定的阈值,就拒绝后续的请求。这个时间窗口可以是1秒、1分钟等。

4 为什么选择 Redis+Lua 实现限流?

  • Redis具有高性能、单线程的特点,能够处理高并发请求
  • 同时,Redis提供了丰富的数据结构和原子操作,使得限流算法的实现更加简单高效
  • Lua 脚本减少网络交互次数,并通过原子性避免并发问题。
  • 相比本地缓存(如 Guava),Redis 支持跨服务实例的统一限流,更适合微服务架构。

5 您是如何在Redis中实现计数器算法的限流的?能详细描述一下实现过程吗?

  • 注解+AOP 切面+Lua 脚本
  • 用自己理解的话来描述,具体应用场景,在登录接口添加限流。
  • 简述实现过程:定义限流配置(RedisConfig)->自定义限流注解->AOP 切面实现限流逻辑-> 登录接口应用注解

6 登录接口为何需要单独限流?

  • 登录接口通常配置在网关白名单,绕过网关认证,无法被全局限流捕获
  • 登录接口易被暴力破解或高频刷取,需独立防护。通过 Redis+Lua 可精准限制单个用户 / IP 的请求频率。

7 您是如何处理并发请求的?在高并发场景下,限流策略是否依然有效?

  • 通过Redis单线程的特点和Lua脚本的原子性来处理并发请求,确保计数器的准确性。
  • 在高并发场景下,限流策略依然有效,因为Redis的高性能和Lua脚本的原子操作可以应对大量请求

8 有自己压测过吗?怎么压测的?

  • 有, 使用JMeter发送1秒10个请求, 或者1秒100请求等
  • 在不同的并发请求下, 所得出的结果均符合预期

9 当限流计数器达到上限时,您是如何处理用户请求的?是否有备用方案?

  • 计数器达到上限时,我们会拒绝后续的请求,并返回一个友好的错误信息
  • 同时,我们会记录这些被拒绝的请求,以便后续进行分析和调整限流策略

10 参考链接

  1. PmHub实现Redis加Lua脚本基于计数器算法的限流
  2. Redis+Lua登录限流相关

相关文章:

【PmHub面试篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现面试专题解析

你好,欢迎来到本次关于PmHub中基于Redis加Lua脚本的计数器算法限流实现的面试系列分享。在这篇文章中,我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解,强烈推荐参考之前发布的博文:【PmHub后端篇】Pm…...

计算机网络领域所有CCF-A/B/C类期刊汇总!

本期小编统计了【计算机网络】领域CCF推荐所有期刊的最新影响因子,分区、年发文量以及投稿经验,供大家参考! CCF-A类 1 IEEE Journal on Selected Areas in Communications 【影响因子】13.8 【期刊分区】JCR1区,中科院1区TOP …...

有意向往gis开发靠,如何规划学习?

听说GIS开发工资不错、还不像互联网那么卷?心动了?但一看那些“WebGL”、“空间分析”、“OGC规范”的词儿就头大?别急! 今天咱就聊聊零基础/转行选手,咋规划学习GIS开发这条路。不整高大上,就讲实在的&am…...

五、查询处理和查询优化

五、查询处理和查询优化 主要内容 查询概述查询处理过程关系操作的基本实现算法查询优化技术代数优化基于存取路径的优化基于代价估算的优化 1. 查询概述 查询是数据库管理系统中使用最频繁、最基本的操作,对系统性能有很大影响。 对于同一个SQL查询&#xff0c…...

缓解骨质疏松 —— 补钙和补维 D

骨质老化/疏松原理(机制)骨密度下降与骨小梁结构退化局部受压导致的微损伤或压力集中 诊断要点治疗策略吃什么食物能补钙呢?钙片吃什么食物能补维生素 D 呢? 骨质老化/疏松 骨质老化(常指骨密度下降或骨质疏松&#x…...

《PMBOK® 指南》第八版草案重大变革:6 大原则重构项目管理体系

项目管理领域的权威指南迎来关键升级!PMI 最新发布的《PMBOK 指南》第八版草案引发行业广泛关注,此次修订首次将项目管理原则浓缩为 6 大黄金法则,重构 7 大绩效域,并首度公开过程组与绩效域的映射关系。本文将全面解析新版核心变…...

Ctrl+R 运行xxx.exe,发现有如下问题.

CtrlR 运行xxx.exe,发现有如下问题. (1)找不到Qt5Core.all,Qt5Cored.dll,Qt5Gui.dll,Qt5Guid.dll,Qt5Widgets.all,Qt5Widgetsd.dll? (2)之后找不到libwinpthread-1.dll 从这个目录拷贝相应的库到运行xx.exe目录下 方法二:将库路径添加到系统PATH环境变量里: 在Path中添加路…...

极智项目 | 基于PyQT+Whisper实现的语音识别软件设计

这是一个基于OpenAI的Whisper模型的语音识别应用程序,使用PyQt5构建了简洁直观的用户界面。该应用支持多语言识别,特别优化了中文识别体验。 项目下载:链接 功能特点 简洁现代的深色主题界面支持多语言识别(中文、英语、日语等…...

vue+cesium示例:地形开挖(附源码下载)

基于cesium和vue绘制多边形实现地形开挖效果,适合学习Cesium与前端框架结合开发3D可视化项目。 demo源码运行环境以及配置 运行环境:依赖Node安装环境,demo本地Node版本:推荐v18。 运行工具:vscode或者其他工具。 配置方式&#x…...

升级:用vue canvas画一个能源监测设备和设备的关系监测图!

用vue canvas画一个能源电表和设备的监测图-CSDN博客 上一篇文章,我是用后端的数据来画出监测图。这次我觉的,用前端来控制数据,更爽。 本期实现功能: 1,得到监测设备和设备的数据,然后进行存库 2&…...

Elasticsearch + Milvus 构建高效知识库问答系统《一》

🔍 Elasticsearch Milvus 构建高效知识库问答系统(RAG 技术实战) 📌 目录 背景介绍Elasticsearch 在知识库检索中的作用Milvus 在知识库检索中的作用混合检索:Elasticsearch Milvus完整代码实现部署建议与优化方向…...

深入理解 transforms.Normalize():PyTorch 图像预处理中的关键一步

深入理解 transforms.Normalize():PyTorch 图像预处理中的关键一步 在使用 PyTorch 进行图像分类、目标检测等深度学习任务时,我们常常会在数据预处理部分看到如下代码: python复制编辑transform transforms.Compose([transforms.ToTensor…...

leetcode 2434. 使用机器人打印字典序最小的字符串 中等

给你一个字符串 s 和一个机器人,机器人当前有一个空字符串 t 。执行以下操作之一,直到 s 和 t 都变成空字符串: 删除字符串 s 的 第一个 字符,并将该字符给机器人。机器人把这个字符添加到 t 的尾部。删除字符串 t 的 最后一个 字…...

爆炸仿真的学习日志

今天学习了一下【Workbench LS-DYNA中炸药在空气中爆炸的案例-哔哩哔哩】 https://b23.tv/kmXlN29 一开始 如果你的 ANSYS Workbench 工具箱(Toolbox)里 只有 SPEOS,即使尝试了 右键刷新、重置视图、显示全部 等方法仍然没有其他分析系统&a…...

【Fiddler抓取手机数据包】

Fiddler抓取手机数据包的配置方法 确保电脑和手机在同一局域网 电脑和手机需连接同一Wi-Fi网络。可通过电脑命令行输入ipconfig查看电脑的本地IP地址(IPv4地址),手机需能ping通该IP。 配置Fiddler允许远程连接 打开Fiddler,进入…...

[华为eNSP] OSPF综合实验

目录 配置流程 画出拓扑图、标注重要接口IP 配置客户端IP 配置服务端IP 配置服务器服务 配置路由器基本信息:名称和接口IP 配置路由器ospf协议 测试结果 通过配置OSPF路由协议,实现跨多路由器的网络互通,并验证终端设备的访问能力。 …...

东芝Toshiba DP-4528AG打印机信息

东芝 Toshiba DP 4528AG 是一款黑白激光数码复合机: 类型:激光数码复合机,涵盖复印、打印、扫描、传真功能,能满足办公室多样化的文档处理需求。速度类型:中速,黑白复印和打印速度可达 45 页 / 分钟&#…...

Vue3+Vite中lodash-es安装与使用指南

在 Vue 3 Vite 项目中安装和使用 lodash-es 的详细指南如下: 一、为什么选择 lodash-es? ES 模块支持:lodash-es 以原生 ES 模块格式发布,支持现代构建工具的 Tree Shaking 按需加载:只引入需要的函数,显…...

完美搭建appium自动化环境

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 桌面版appium提供可视化操作appium主要功能的使用方式,对于初学者非常适用。 如何在windows平台安装appium桌面版呢,大体分两个步骤&…...

c++中的输入输出流(标准IO,文件IO,字符串IO)

目录 &#xff08;1&#xff09;I/O概述 I/O分类 不同I/O的继承关系 不同I/O对应的头文件 &#xff08;2&#xff09;iostream 标准I/O流 iostream头文件中的IO流对象 iostream头文件中重载了<<和>> 缓冲区示意图 标准输入流 cin用法 cin&#xff1a;按空…...

App使用webview套壳引入h5(三)——解决打包为app后在安卓机可物理返回但是在苹果手机无法测滑返回的问题

话不多说&#xff0c;直接放最终版本代码。 解决思路是&#xff1a;如果设备是ios设备在myH5中监听 touchstart 和touchend事件。 经过 App使用webview套壳引入h5的最终代码如下 myApp中&#xff0c;entry.vue代码如下&#xff1a; <template><view class"ent…...

CSS中text-align: justify文本两端对齐

text-align: justify; 是 CSS 中用于控制文本对齐方式的属性值&#xff0c;它的核心作用是让文本两端对齐&#xff08;分散对齐&#xff09;&#xff0c;使段落左右边缘整齐排列。以下是详细解析&#xff1a; 作用效果 均匀分布间距 浏览器会自动调整单词/字符之间的间距&#…...

2025年渗透测试面试题总结-ali 春招内推电话1面(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 ali 春招内推电话1面 一、Web安全核心理解 二、熟悉漏洞及防御方案 三、UDF提权原理与防御 四、XSS Fuzz…...

C#中的依赖注入

1. 依赖注入&#xff08;Dependency Injection, DI&#xff09;概述 定义 &#xff1a;依赖注入是一种设计模式&#xff0c;允许将组件的依赖关系从内部创建转移到外部提供。这样可以降低组件之间的耦合度&#xff0c;提高代码的可测试性、可维护性和可扩展性。 核心思想 &…...

Reactor和Proactor

reactor的重要组件包括&#xff1a;Event事件、Reactor反应堆、Demultiplex事件分发器、Eventhandler事件处理器。...

黄晓明新剧《潜渊》定档 失忆三面间谍开启谍战新维度

据悉&#xff0c;黄晓明领衔主演的谍战剧《潜渊》已于近日正式定档6月9日&#xff0c;该剧以“失忆三面间谍”梁朔为核心&#xff0c;打破传统谍战剧的框架和固有角度&#xff0c;以一种特别的视角将悬疑感推向极致。剧中&#xff0c;梁朔因头部受伤失去记忆&#xff0c;陷入身…...

深入浅出Java ParallelStream:高效并行利器还是隐藏的陷阱?

在Java 8带来的众多革新中&#xff0c;Stream API彻底改变了我们对集合操作的方式。而其中最引人注目的特性之一便是parallelStream——它承诺只需简单调用一个方法&#xff0c;就能让数据处理任务自动并行化&#xff0c;充分利用多核CPU的优势。但在美好承诺的背后&#xff0c…...

物联网嵌入式开发实训室建设方案探讨(高职物联网应用技术专业实训室建设)

一、建设背景与目标 在当今数字化时代&#xff0c;物联网技术正以前所未有的速度改变着人们的生活和工作方式。从智能家居到工业自动化&#xff0c;从智能交通到环境监测&#xff0c;物联网的应用场景无处不在。根据市场研究机构的数据&#xff0c;全球物联网设备连接数量预计…...

集成学习三种框架

集成学习通过组合多个弱学习器构建强学习器&#xff0c;常见框架包括Bagging&#xff08;装袋&#xff09;、Boosting&#xff08;提升&#xff09; 和Stacking&#xff08;堆叠&#xff09; 一、Bagging&#xff08;自助装袋法&#xff09; 核心思想 从原始数据中通过有放回…...

大数据量高实时性场景下订单生成的优化方案

文章目录 一、问题背景二、核心优化目标三、架构设计方案3.1 分层架构设计 3.2 关键组件说明 四、核心优化策略4.1 异步处理与流量控制4.1.1 异步接口设计4.1.2 任务进度查询 4.2 批量处理与并行计算4.2.1 数据分批处理4.2.2 并行流处理 4.3 数据库优化4.3.1 批量插入4.3.2 索…...