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");
相关推荐
Crazy________5 小时前
Redis03:持久化存储,大key分析,主从复制及哨兵模式
数据库·redis·容器
范什么特西6 小时前
redis题目面渣重点
数据库·redis·缓存
xcLeigh8 小时前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量
油丶酸萝卜别吃12 小时前
Redis 布隆过滤器快速实现
数据库·redis·缓存
MC皮蛋侠客1 天前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
渣渣盟1 天前
当 Redis 写入成为性能瓶颈时,如何利用 异步批量 Sink 将吞吐量从 1w QPS 提升到 10w+?
数据库·redis·php
MC皮蛋侠客1 天前
Redis 系列(六):过期、内存淘汰与内存优化——让 Redis 活得更久
数据库·redis·bootstrap
MC皮蛋侠客1 天前
Redis 系列(七):事务、Pipeline 与 Lua 脚本——从原子性到 Functions
数据库·redis·lua
MC皮蛋侠客1 天前
Redis 系列(八):缓存设计模式与一致性——从 Cache Aside 到防雪崩
redis·缓存·设计模式
渣渣盟1 天前
当 Redis 写入不再是瓶颈后,Flink 任务的反压可能来自哪里?如何系统性地定位和解决 Flink 反压问题?
数据库·redis·flink