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");
相关推荐
itmrl5 小时前
Redis高可用方案之哨兵模式搭建
redis
懂得节能嘛.8 小时前
【Java动态线程池】Redis监控+动态调参
java·开发语言·redis
凌寒119 小时前
Linux(Debain)安装Redis、数据迁移
linux·运维·服务器·redis
⑩-9 小时前
基于Redis Lua脚本的秒杀系统
java·redis
三翼鸟数字化技术团队11 小时前
基于redis的多资源分布式公平锁的设计与实践
redis·后端
h***346311 小时前
Redis安装教程(Windows版本)
数据库·windows·redis
3***g20511 小时前
如何使用Spring Boot框架整合Redis:超详细案例教程
spring boot·redis·后端
a***131412 小时前
redis存取list集合
windows·redis·list
toooooop812 小时前
CentOS 7 系统上安装 **Nginx + MySQL 5.7 + PHP 7.3 + Redis** 的完整步骤
redis·mysql·nginx·centos·php7
b***653217 小时前
【解决】RESP.app GUI for Redis 连接不上redis服务器
服务器·redis·github