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");
相关推荐
半夏知半秋7 小时前
redis-哨兵模式配置整理
数据库·redis·笔记·后端·学习·lua·安全架构
小丁爱养花20 小时前
Redis 内部编码/单线程模型/string
数据库·redis·缓存·1024程序员节
爬山算法20 小时前
Redis(84)如何解决Redis的缓存击穿问题?
java·redis·缓存
赵庆明老师1 天前
C# 结合Redis Cache 访问MySQL数据库
数据库·redis·c#
李少兄1 天前
记一次 Spring Boot 项目中 Redis 工具类的重构实践
spring boot·redis·重构
Merlos_wind1 天前
【Redis典型应用——缓存详解】
数据库·redis·缓存
摇滚侠1 天前
Spring Boot3零基础教程,整合 Redis,笔记69
spring boot·redis·笔记
DemonAvenger1 天前
Redis性能优化实战:从配置调优到代码实现的全面指南
数据库·redis·性能优化
阿祥~1 天前
windows 安装 Redis
数据库·redis·缓存
ZZHHWW1 天前
Redis 哨兵模式详解
redis·后端