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");
相关推荐
一勺菠萝丶2 小时前
零基础掌握 Scrapy 和 Scrapy-Redis:爬虫分布式部署深度解析
redis·爬虫·scrapy
转身後 默落7 小时前
01.Redis 概述
数据库·redis·缓存
gs8014011 小时前
GitLab Docker Compose 迁移后 Redis 权限问题排查与解决
redis·docker·gitlab
转身後 默落14 小时前
06.Redis 配置文件说明
数据库·redis·bootstrap
小满和小晨14 小时前
Redis+Lua的分布式限流器
redis·分布式·lua
阿萨德528号15 小时前
5、生产Redis高并发分布式锁实战
数据库·redis·分布式·缓存
IT小辉同学16 小时前
CentOS 7 编译 Redis 6.x 完整教程(解决 GCC 版本不支持 C11)
linux·redis·centos
掉头发的王富贵16 小时前
Java玩转Redis+Lua脚本:一篇让你从小白到高手的实战入门指南
java·redis·lua
转身後 默落18 小时前
03.一键编译安装Redis脚本
数据库·redis·缓存
abigalexy18 小时前
深入Redis集群模式-分布式缓存架构
redis·分布式