# request-limit **Repository Path**: yangHS99/request-limit ## Basic Information - **Project Name**: request-limit - **Description**: 一个与接口限流的解决方案。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-06-07 - **Last Updated**: 2024-01-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # request-limit ### 接口限流介绍 接口限流(Rate Limiting)是一种用于控制应用程序接口请求频率的技术。它的目的是防止过多的请求同时访问服务器,以保护服务器免受过载、恶意请求和资源耗尽的影响。接口限流通常是在应用程序、API 网关或反向代理层实现的,以确保对底层服务的稳定访问。 接口限流可以通过多种方式实现,以下是一些常见的限流策略: 1. **固定窗口限流:** 在固定的时间窗口内,比如每秒钟,允许请求的数量是固定的。如果超过这个数量,额外的请求将被阻塞或延迟处理。 2. **滑动窗口限流:** 类似于固定窗口,但窗口的移动是平滑的,而不是固定的。这允许请求在时间上有更平滑的分布。 3. **令牌桶算法:** 令牌桶算法维护一个令牌桶,其中每个令牌代表一个请求的许可。令牌以固定速率被添加到桶中,每个请求在处理之前需要获取一个令牌。如果桶中没有足够的令牌,请求将被暂时阻塞。 4. **漏桶算法:** 漏桶算法维护一个固定容量的桶,所有请求都被添加到桶中。但桶以固定速率漏水,如果请求超过漏水速率,多余的请求将被拒绝或排队。 5. **动态限流:** 基于服务器负载、网络延迟或其他因素动态调整限流策略,以适应不同情况下的请求量和服务器状态。 ### 软件介绍 1.目前该starter组件包含的限流算法有令牌桶算法和漏桶算法,其他限流策略暂时没有添加进来,后续有时间会添加。 2.使用技术 - Spring AOP - SpringBoot - Redis - Lua脚本 ### 安装教程 1. 给出了starter组件和一个demo进行测试。引入starter依赖即可 ### 使用说明 1. ```java com.yang api-limit-spring-boot-start 1.0-SNAPSHOT ``` 2.项目启动类添加注解@EnableRequestLimit 3.接口上添加@RequestLimit注解,关于@RequestLimit的注解信息可以参考代码注释。关于限流算法的选择提供了一个枚举类,用户可以选择合适的限流算法。 ```java /** * 令牌算法 */ TOKEN_BUCKET(1, "令牌算法"), /** * 漏桶算法 */ LEAKY_BUCKET(2, "漏桶算法"), /** * 固定窗口 */ FIXED_WINDOW(3, "固定窗口"), /** * 滑动窗口 */ SLIDE_WINDOW(4, "滑动窗口"); ``` ### 实现原理 主要是使用了AOP,在请求被真正处理之前会执行切面的逻辑。 ### 延伸阅读 灵感来源: [austin/高并发接口限流策略 - 码云 - 开源中国 (gitee.com)](https://gitee.com/jacklinnnn/redis-aop-limit-strategy?_from=gitee_search)