当前位置: 首页 > news >正文

SpringBoot集成Redisson实现限流(二)

1. 简介

Springboot集成Redisson默认的限流器为令牌桶型限流器,底层是通过lua脚本去实现的。
通过lua脚本我们可以去实现一个滑动窗口限流器,利用ZSET格式数据就可以轻松实现。
springboot集成Redisson就不做讲解,可以参考:springboot集成redisson

2. 滑动窗口lua脚本讲解

-- 移除时间窗口之外的数据,通过ZSET自带的排序score可以轻松做到
redis.call('ZREMRANGEBYSCORE', KEYS[1], 0, tonumber(ARGV[2]) - tonumber(ARGV[3]));
-- 判断当前窗口是否达到限流限制 
if (redis.call('ZCARD', KEYS[1]) >= tonumber(ARGV[1])) then 
return nil; 
end; 
-- 添加对应的数据
redis.call('ZADD', KEYS[1], ARGV[2], ARGV[2]); 
-- 过期时间更新,防止key一直占用
redis.call('pexpire', KEYS[1], ARGV[3]); 
return true;

3. 调用

/*** 滑动窗口限流* @param key             限流key* @param threshold       阈值* @param interval        时间间隔* @param unit            单位* @return true-通过 false-限制*/
public static boolean rateLimiterSlidingWindow(String key, long threshold, long interval, TimeUnit unit) {RScript rScript = redissonClient.getScript();long now = System.currentTimeMillis();long intervalMs = TimeUnit.MILLISECONDS.convert(interval, unit);return rScript.eval(RScript.Mode.READ_WRITE, slidingWindowScript, RScript.ReturnType.BOOLEAN,Collections.singletonList(key), threshold, now, intervalMs);
}
http://www.lryc.cn/news/294502.html

相关文章:

  • 【2024美赛E题】985博士解题思路分析(持续更新中)!
  • 北朝隋唐文物展亮相广西,文物预防性保护网关保驾护航
  • 回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)
  • ubuntu离线安装k8s
  • 学成在线:媒体资源管理系统(MAM)
  • 18个8年以上服务器开发经验的面试题(2)
  • 【SpringBoot】applicationContext.getBeansOfType(class)获取某一接口所有实现类,应用于策略模式
  • AJAX-入门
  • 学术写作|第二篇论文写作记录|GPT4论文润色Prompt
  • 力扣热门100题刷题笔记 - 10. 正则表达式匹配
  • 4.0 HDFS 配置与使用
  • 【实训】网络规划与部署实训
  • 相同的树[简单]
  • 02-Web应用_架构构建_漏洞_HTTP数据包_代理服务器
  • 使用flink-cdc-sqlserver出现错误,需要批量开启sqlserver表cdc模式,监听表变化
  • ffmpeg的使用,安装,抽帧,加水印,截图,生成gif,格式转换,抓屏等
  • 游戏视频录制软件推荐,打造专业电竞视频(3款)
  • 两种方式实现文本超出指定行数显示展开收起...
  • Docker进阶篇-Docker网络
  • 用两个队列实现栈
  • 【数据分享】1929-2023年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)
  • Windows11安装运行Linux(Ubuntu)
  • 钉钉群机器人-发送群消息
  • OceanBase 4.2.2 GA 发布,全新特性快速预览!
  • IP代理類型詳解 | 基於網路協議、匿名性、IP來源
  • uniapp中使用EelementPlus
  • Swift Vapor 教程(查询数据、插入数据)
  • QT自用,勿点
  • 计组学习笔记2024/2/5
  • Redis(三)(实战篇)