1,首先我们redis有很多限流的算法(比如:令牌桶,计数器,时间窗口)等,但是都有一定的缺点,令牌桶在单项目中相对来说比较稳定,但是在分布式集群里面缺显的不那么友好,这时候,在分布式里面进行限流的话,我们则可以使用redis+lua脚本进行限流,能抗住亿级并发
2,下面说说lua+redis进行限流的做法
开发环境:idea+redis+lua
第一:
打开idea的插件市场,然后搜索lua,点击右边的安装,然后安装好了,重启即可
第二:写一个自定义限流注解
package com.sport.sportcloudmarathonh5.config;
import java.lang.annotation.*;
/**
* @author zdj
* @version 1.0.0
* @description 自定义注解实现分布式限流
*/
@Target(value = ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisLimitStream {
/**
* 请求限制,一秒内可以允许好多个进入(默认一秒可以支持100个)
* @return
*/
int reqLimit() default 1000;
/**
* 模块名称
* @return
*/
String reqName() default "";
}
第三:在指定的方法上面添加该注解
/**
* 压测接口
* @return
*/
@Login(isLogin = false)
@RedisLimitStream(reqName = "名额秒杀", reqLimit = 1000)
@ApiOperation(value = "压测接口", notes = "压测接口", httpMethod = "GET")
@RequestMapping(value =