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");
相关推荐
前端一课1 天前
第1章 世界静默,键盘独鸣
redis
泉城老铁1 天前
如何用Spring Boot实现分布式锁?
java·redis·后端
代码or搬砖1 天前
Java中操作Redis
java·开发语言·redis
en-route1 天前
Spring 框架下 Redis 会话存储应用实践
java·redis·spring
sugarzhangnotes1 天前
应用服务OOM引发GC异常,导致Redis请求超时失败的问题分析与解决
数据库·redis·测试工具
小满、1 天前
Redis:数据结构与基础操作(String、List、Hash、Set、Sorted Set)
java·数据结构·redis·分布式锁
zjeweler1 天前
redis tools gui ---Redis图形化漏洞利用工具
数据库·redis·web安全·缓存
武子康1 天前
Java-192 深入拆解 EVCache 内部原理:Memcached 架构、Slab 分配与 LRU 过期机制全解析
数据库·redis·缓存·架构·memcached·guava·evcache
哈哈哈笑什么1 天前
完整Redis分布式锁技术方案(基于Redisson)
redis·分布式·spring cloud
m0_488777651 天前
Redis三种服务架构
redis·架构·集群·哨兵