使用java springboot 使用 Redis 作为限流工具

使用 Redis 作为限流工具

Redis 还可以用于实现限流功能,例如限制每个 IP 地址的访问次数。你可以使用 Redis 的计数器功能来实现这一点。

实现限流逻辑
复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class RateLimiter {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public boolean isAllowed(String key, int maxRequests, int timeWindowInSeconds) {
        Long requestCount = redisTemplate.opsForValue().increment(key);

        if (requestCount == 1) {
            // 如果是第一次请求,设置过期时间
            redisTemplate.expire(key, timeWindowInSeconds, TimeUnit.SECONDS);
        }

        return requestCount <= maxRequests;
    }
}
相关推荐
Lee川14 分钟前
深入浅出JavaScript事件机制:从捕获冒泡到事件委托
前端·javascript
光影少年14 分钟前
async/await和Promise的区别?
前端·javascript·掘金·金石计划
恋猫de小郭15 分钟前
Flutter 发布官方 Skills ,Flutter 在 AI 领域再添一助力
android·前端·flutter
心在飞扬16 分钟前
工具调用出错捕获提升程序健壮性
前端·后端
HelloReader16 分钟前
Tauri 命令作用域(Command Scopes)精细化控制你的应用权限
前端
心在飞扬17 分钟前
基于工具调用的智能体设计与实现(*)
前端·后端
心在飞扬18 分钟前
函数调用快速提取结构化数据使用技巧
前端·后端
心在飞扬21 分钟前
不支持函数调用的大语言模型解决技巧
前端·后端
codingWhat21 分钟前
如何实现一个「万能」的通用打印组件?
前端·javascript·vue.js
赵_叶紫1 小时前
聊聊 Agent Skills 这个东西
前端