Redis+Lua脚本实现分布式服务的限流

本文介绍了一种使用Redis和Lua脚本实现的分布式限流方法,包括限流接口、自定义注解、AOP切面及Lua脚本的详细实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

​ 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务。

​ 开始打算使用Guava RateLimiter来实现限流,但RateLimiter是局限于单机中使用,然后打算使用Redis+Lua脚本实现限流。

1 提供调用的接口

@Slf4j
@RestController
@RequestMapping("/rateLimter")
public class RateLimterController {
   
   

    @PostMapping(value = "rateLimter")
    @RateLimiter(key = "rateLimter", limit = "30", expire = "1", message = "请稍后再试")
    public void rateLimter() {
   
   
       log.info("通过测试")
    }
}

2 自定义注解

/**
 * @className RateLimiter
 * @desc 限流注解
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {
   
   

    /**
     * 限流key
     * @return
     */
    String key() default "rate:limiter";
    /**
     * 单位时间限制通过请求数
     * @return
     */
    String limit() default "30";

    /**
     * 过期时间,单位秒
     * @return
     */
    String expire() default "1";

    /**
     * 限流提示语
     * @return
     */
    String message() default "请稍后再试";
}

3 设置切面

@Slf4j
@Aspect
@Component
@EnableAspectJAutoProxy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值