什么是QPS
QPS:queries per second :每秒的请求数
QPS控制的目的
防止恶意请求,增加服务端负载
以下代码可以保证在任意时间段(1s)内,请求数不超过100。
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
/**
*使用数组存储每个请求到来的时间,前10次请求顺利通过,并填满数组。
* 后续请求到来时,判断当前时间是否比数组中最早的时间晚1s,未晚,则打回,
* 晚则替换数组中最早的值。循环。
*/
public class QpsControlUtil {
/**
* 接受请求窗口
*/
private Long[] accessWindow;
/**
* qps限制次数
*/
private static final int limit = 10;
/**
* 指针位置
*/
private int curPosition;
/**
* 时间间隔
*/
private static final long period = TimeUnit.SECONDS.toMillis(1);
private final Object lock = new Object();
private static class SingletonHolder {
private static final QpsControlUtil SINGLETON = new QpsControlUtil();
}
/**
* 单例方法入口
* @return 单例类
*/
public