SpringBoot Redis用注释实现接口限流详解
作者:叶秋学长 发布时间:2022-03-15 17:40:55
标签:SpringBoot,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 分钟内访问 100 次。
针对某一个 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 中。
另外三个参数好理解,我就不多说了。
来源:https://blog.csdn.net/m0_63722685/article/details/125637507


猜你喜欢
- 先看下效果图:这个需要用到1个开源的 库,这个后面也会说下的。工程目录:1. MainActivity.javapublic class M
- 最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容。首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间
- 前言我们知道在Android开发中不能在非ui线程中更新ui,但是,有的时候我们需要在代码中执行一些诸如访问网络、查询数据库等耗时操作,为了
- 实现GridView的横向滚动效果如下图:具体实现的代码•1. 主界面布局代码:activity_main.xml<?xml vers
- 如下所示:@Overridepublic void onWindowFocusChanged(boolean hasFocus) {supe
- 获取MCC/MNC以便控制小区广播的开启 双卡:((GeminiPhone)mPhone).getIccCardGemini(simId).
- FastDFS简介FastDFS是一款开源的轻量级分布式文件系统,使用C实现,支持Linux、BSD等unix-like操作系统。值得注意的
- 抽象类和抽象方法常用知识点:(1)抽象类作为被继承类,子类必须实现抽象类中的所有抽象方法,除非子类也为抽象类。也就是说,如果子类也为抽象类,
- 1.相关概念Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。建
- 网站优化必做的事情之一,百度ping,主动推送给百度文章添加时调用百度推送方法//保存protected void btnSubmit_Cl
- 本文实例为大家分享了好看的android音量旋钮,供大家参考,具体内容如下效果图:实现思路,用的自定义的控件,图片和按钮都是自己绘制的,并且
- 简介:接上文实现对FTP的传送文件,此文和上文可以说是如出一辙,不过此文是通过cmd进行建立连接的,建立连接后也是通过以下几个步骤实现操作。
- 一、ViewPageIndicator开源框架的基本用法 我们先得去Github上面下载这个库,下载地址:https://github.co
- ButterKnife 算是一款知名老牌 Android 开发框架了,通过注解绑定视图,避免了 findViewById() 的操作,广受好
- /* * 获取当前的手机号 &nb
- 前言:仿微信通讯录搜索功能,通过汉字或拼音首字母找到匹配的联系人并显示匹配的位置一:先看效果图字母索引搜索匹配二:功能分析1:汉字转拼音通讯
- 前言Android开发中经常使用findViewById来获取控件然后进行一些列操作,当控件太多的时候代码就非常臃肿,今天就来学习一个新的开
- 一、概述在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依
- 一、 结构:值类型,存储在堆栈中,位于计算机的内存逻辑区域中 类 &n
- 本文实例为大家分享了C#实现简单串口通讯的具体代码,供大家参考,具体内容如下参数设置界面代码:using System;using Syst