SpringBoot + Redis 实现接口限流,一个注解的事

Redis 除了做缓存,还能干很多很多事情:分布式锁、限流、处理请求接口幂等性。。。太多太多了~今天想和小伙伴们聊聊用 Redis 处理接口限流。

1. 准备工作

首先我们创建一个 Spring Boot 工程,引入 Web 和 Redis 依赖,同时考虑到接口限流一般是通过注解来标记,而注解是通过 AOP 来解析的,所以我们还需要加上 AOP 的依赖,最终的依赖如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

然后提前准备好一个 Redis 实例,这里我们项目配置好之后,直接配置一下 Redis 的基本信息即可,如下:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=123

好啦,准备工作就算是到位了。

2. 限流注解

接下来我们创建一个限流注解,我们将限流分为两种情况:

  1. 针对当前接口的全局性限流,例如该接口可以在 1 分钟内访问 100 次。

  2. 针对某一个 IP 地址的限流,例如某个 IP 地址可以在 1 分钟内访问 100 次。

针对这两种情况,我们创建一个枚举类:

public enum LimitType {
    /**
     * 默认策略全局限流
     */
    DEFAULT,
    /**
     * 根据请求者IP进行限流
     */
    IP
}

接下来我们来创建限流注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {
    /**
     * 限流key
     */
    String key() default "rate_limit:";    /**
     * 限流时间,单位秒
     */
    int time() default 60;    /**
     * 限流次数
     */
    int count() default 100;    /**
     * 限流类型
     */
    LimitType limitType() default LimitType.DEFAULT;
}

第一个参数限流的 key,这个仅仅是一个前缀,将来完整的 key 是这个前缀再加上接口方法的完整路径,共同组成限流 key,这个 key 将被存入到 Redis 中。

<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【力扣一刷】代码随想录day28(93.复原IP地址、78.子集、90.子集II )

目录 【93.复原IP地址】中等题&#xff08;偏难&#xff0c;坑很多&#xff09; 【78.子集】中等题&#xff08;偏简单&#xff09; 【90.子集II】中等题 【93.复原IP地址】中等题&#xff08;偏难&#xff0c;坑很多&#xff09; 思路&#xff1a;以101023为例子 1、将题目…

输出100~200之间的素数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现素数判断函数&#xff1b; int Prime(int number) {//初始化变量值&#xff1b;int divided 2;int JudgementCondition 0;//循环判断素数&#xff1b;wh…

(C)1007 素数对猜想

1007 素数对猜想 问题描述 输入样例&#xff1a; 20 输出样例&#xff1a; 4 解决方案&#xff1a; #include<stdio.h> #include<string.h> #include<math.h> int main(){int n,d;int a[100000];int flag,jishu0;scanf("%d",&n);memset(a,-1,…

基于51单片机甲醛浓度检测设计

基于51单片机甲醛浓度检测设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.甲醛浓度数据经过单片机处理&#xff0c;由LCD1602实时显示。 2.可通过按键设置甲醛报警阈值&#xff…

RK3568驱动指南|第十四篇 单总线-第158章DS18B20编写字符设备驱动框架

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

鸿蒙原生应用开发-网络管理HTTP数据请求

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;具体的…

【pytest】fixture机制

目录 概念fixture 的主要特点测试场景1. 准备和清理测试数据2. 模拟外部依赖3. 共享资源&#xff08;如数据库连接&#xff09;4. 使用内置 fixture5. 自动使用 fixture 用途 概念 fixture机制是pytest测试框架中的一个核心概念&#xff0c;它提供了一种用于处理测试所需资源的…

vim中如何使用Vundle插件管理器?

本文结构&#xff1a; a、简介 b、安装 c、用法举例 a、Vundle是一个Vim插件管理器&#xff0c;它极大地简化了Vim插件的安装、更新和卸载过程。Vundle通过简化Vim插件的管理过程&#xff0c;帮助用户更高效地定制他们的Vim编辑环境。 b、安装Vundle Vundle的安装通常是通…

鸿蒙OS元服务开发:【WebGL网页图形库开发概述】

WebGL的全称为Web Graphic Library(网页图形库)&#xff0c;主要用于交互式渲染2D图形和3D图形。目前HarmonyOS中使用的WebGL是基于OpenGL裁剪的OpenGL ES&#xff0c;可以在HTML5的canvas元素对象中使用&#xff0c;无需使用插件&#xff0c;支持跨平台。WebGL程序是由JavaScr…

HBase报错:Master is initializing

现象&#xff1a;org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 描述&#xff1a;在启动HBase之后进入bin/hbase shell 命令行进行一些操作&#xff0c;比如建表或者添加数据到表中出现这种报错org.apache.hadoop.hbase.PleaseHoldException: Master …

《信息技术服务 智能运维 第2部分:数据治理》国家标准2024年第一次线下编写会议成功召开

2024年3月13日~15日&#xff0c;由运维数据治理国标编制组主办的运维数据治理国家标准2024年第一次编写工作会议在上海成功召开。 本次会议由云智慧&#xff08;北京&#xff09;科技有限公司承办&#xff0c;来自南网数字集团信通公司、太保科技、平安银行、广发银行、广东农…

LeetCode:1997. 访问完所有房间的第一天(DP Java)

目录 1997. 访问完所有房间的第一天 题目描述&#xff1a; 实现代码与解析&#xff1a; DP 原理思路&#xff1a; 1997. 访问完所有房间的第一天 题目描述&#xff1a; 你需要访问 n 个房间&#xff0c;房间从 0 到 n - 1 编号。同时&#xff0c;每一天都有一个日期编号&…

hadoop3.0 非高可用安装

伪分布式集群&#xff0c;不依赖zookeeper的hadoop集群 只有namenode, 和datanode, 可以有两个namenode. 没有zookeeper, 没有zkfc, 没有journalnode. 只在学习的时候使用, 生存环境不适用 . 生产环境用的高可用集群见 https://blog.csdn.net/weijiqian/article/details/13715…

什么是AIGC,AIGC的应用领域有哪些,以及对AIGC的未来展望有什么值得关注的方向

AIGC:人工智能生成内容的深度解析 在数字技术的浪潮中,AIGC(ArtificialIntelligenceGeneratedContent,人工智能生成内容)逐渐崭露头角,成为继专业生产内容(PGC)和用户生产内容(UGC)之后的新型内容创作方式。它不仅改变了内容生产的传统模式,更在多个行业中展现出…

QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例

判断接口功能是否正常的方法之一是设计并执行相关的测试用例。下面是从测试QA的角度设计接口测试用例的一些建议&#xff0c;包括功能、边界、异常、链路、上下游和并发等方面&#xff1a; 通过综合考虑这些测试维度&#xff0c;并设计相应的测试用例&#xff0c;可以更全面地评…

蓝桥杯第十五届抱佛脚(七)前缀和与差分

蓝桥杯第十五届抱佛脚&#xff08;七&#xff09;前缀和与差分 前缀和 前缀和算法是一种在数组处理中非常有效的技术&#xff0c;特别是当需要频繁查询某个固定区间内的元素和时。这种算法可以在 O(N) 的时间内预处理数组&#xff0c;并且能在 O(1) 的时间内回答区间和的查询…

CCF-B推荐会议 ICSME’24 4月11日截稿 速来参与

会议之眼 快讯 第40届ICSME 2024 (IEEE International Conference on Software Maintenance and Evolution)即IEEE软件维护与发展国际会议将于 2024 年 10月6日-11日在美国弗拉格斯塔夫阿兹举行&#xff01;ICSME是学术界、工业界和政府研究人员和从业者的首要国际论坛&#x…

阿里AI编码助手“通义灵码”安装及使用

1.介绍 “通义灵码”是一款基于阿里云通义代码大模型打造的智能编码助手&#xff0c;产品于2023年10月31日云栖大会上&#xff0c;正式对外发布。 核心使用场景&#xff1a;代码智能生成和研发智能问答。 主要功能点&#xff1a; &#xff08;1&#xff09;行级/函数级实时…

BPMN的发展及简介

背景 BPM“通过建模、自动化、管理和优化流程&#xff0c;打破跨部门跨系统业务过程依赖、打破信息孤岛&#xff0c;提高业务效率和效果”&#xff0c;通俗一点讲&#xff0c;就是工作流引擎。在进行流程设计时&#xff0c;需要将流程的元素进行定义&#xff0c;并按照一定的格…

PSDK 102S V3:航测领域的革新者

在航测领域&#xff0c;精确、高效的数据获取一直是行业追求的目标。PSDK 102S V3&#xff0c;作为SHAR三赛尔推出的一款高性能倾斜摄影相机&#xff0c;凭借其先进的技术和卓越的性能&#xff0c;正在成为航测领域的革新者。 自研三轴智能稳定云台&#xff1a;PSDK 102S V3配备…