Redisson实现限流

1. 引入Redisson

参考: 这篇文章即可。

2. 使用RedissonClinet实现

代码如下:

java 复制代码
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 {
    @Resource
    private 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. 使用用限流

如下:

java 复制代码
// 限流, 一天只能访问10次, 被限流会抛异常
String limitKey = "prefix:" + loginUser.getId();
int limitTime = 24 * 60 * 60;
redisLimiterManager.doRateLimit(limitKey, 10, limitTime, "今天的请求次数为0");
相关推荐
KK溜了溜了1 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
爱上语文6 小时前
Redis基础(6):SpringDataRedis
数据库·redis·后端
Java初学者小白7 小时前
秋招Day14 - Redis - 应用
java·数据库·redis·缓存
奈斯ing7 小时前
【Redis篇】数据库架构演进中Redis缓存的技术必然性—高并发场景下穿透、击穿、雪崩的体系化解决方案
运维·redis·缓存·数据库架构
一眼万年048 小时前
Redis Cluster模式
redis·微服务
deriva9 小时前
.netcore+ef+redis+rabbitmq+dotcap先同步后异步再同步的方法,亲测有效
redis·rabbitmq·.netcore
爱上语文10 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
Java初学者小白13 小时前
秋招Day15 - Redis - 缓存设计
java·数据库·redis·缓存
都叫我大帅哥16 小时前
Redis GEO全解:从入门到精通,让你的应用“空间觉醒”
redis
都叫我大帅哥17 小时前
Redis 的 HyperLogLog:用 12KB 数清银河系星星的魔法计数器
redis