1. 引入Redisson
参考: 这篇文章即可。
2. 使用RedissonClinet实现
代码如下:
import org.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;import javax.annotation.Resource;/*** redis 限流管理器* @author xxx* @version 1.0* @date xxx*/@Service
public class RedisLimiterManager {@Resourceprivate RedissonClient redissonClient;/*** 限流操作** @param key 限流key* @param limit 指定时间内允许的请求数* @param ttl 指定时间* @param ttl message 限流的提示信息*/public void doRateLimit(String key, int limit, int ttl, String message) {// 创建限流器RRateLimiter rateLimiter = redissonClient.getRateLimiter(key);rateLimiter.trySetRate(RateType.OVERALL, limit,ttl, RateIntervalUnit.SECONDS);// 获取令牌boolean result = rateLimiter.tryAcquire(1);if (!result){throw new RuntimeException(message);}}
}
3. 使用用限流
如下:
// 限流, 一天只能访问10次, 被限流会抛异常
String limitKey = "prefix:" + loginUser.getId();
int limitTime = 24 * 60 * 60;
redisLimiterManager.doRateLimit(limitKey, 10, limitTime, "今天的请求次数为0");